Day 4 - Intermediate: Functions
Bối cảnh: Hệ thống E-commerce (Thương mại điện tử)
1. Today's plan
Hôm nay, chúng ta sẽ học cách sử dụng các hàm xử lý chuỗi và ngày tháng trong SQL để làm việc với dữ liệu trong hệ thống E-commerce.
Các chủ đề chính:
Hàm xử lý chuỗi: LENGTH, LOWER, UPPER, LEFT, RIGHT, CONCAT, POSITION, SUBSTRING.
Hàm xử lý ngày tháng: EXTRACT, TO_CHAR, Intervals & Timestamps.
2. LENGTH, LOWER & UPPER
LENGTH: Trả về độ dài của chuỗi.
LOWER: Chuyển đổi chuỗi thành chữ thường.
UPPER: Chuyển đổi chuỗi thành chữ hoa.
Ví dụ:
SELECT product_name, LENGTH(product_name) AS name_length, LOWER(product_name) AS lower_name, UPPER(product_name) AS upper_name FROM products;
Câu lệnh này sẽ trả về tên sản phẩm, độ dài tên, tên chữ thường và tên chữ hoa.
3. Challenge: LENGTH, LOWER & UPPER
- Yêu cầu: Viết truy vấn để lấy tên khách hàng (customer_name), độ dài tên, tên chữ thường và tên chữ hoa từ bảng customers.
4. Solution: LENGTH, LOWER & UPPER
Giải pháp:
SELECT customer_name, LENGTH(customer_name) AS name_length, LOWER(customer_name) AS lower_name, UPPER(customer_name) AS upper_name FROM customers;
5. LEFT & RIGHT
LEFT: Trả về một số ký tự từ bên trái của chuỗi.
RIGHT: Trả về một số ký tự từ bên phải của chuỗi.
Ví dụ:
SELECT product_name, LEFT(product_name, 3) AS left_name, RIGHT(product_name, 3) AS right_name FROM products;
Câu lệnh này sẽ trả về tên sản phẩm và 3 ký tự đầu tiên/cuối cùng của tên.
6. Challenge: LEFT & RIGHT
- Yêu cầu: Viết truy vấn để lấy email khách hàng (email) và 5 ký tự đầu tiên của email từ bảng customers.
7. Solution: LEFT & RIGHT
Giải pháp:
SELECT email, LEFT(email, 5) AS left_email FROM customers;
8. Concatenate
CONCAT: Nối các chuỗi lại với nhau.
Ví dụ:
SELECT CONCAT(customer_name, ' - ', email) AS customer_info FROM customers;
Câu lệnh này sẽ trả về thông tin khách hàng dưới dạng "Tên khách hàng - Email".
9. Challenge: Concatenate
- Yêu cầu: Viết truy vấn để nối tên sản phẩm (product_name) và giá (price) thành một chuỗi dạng "Tên sản phẩm - Giá" từ bảng products.
10. Solution: Concatenate
Giải pháp:
SELECT CONCAT(product_name, ' - ', price) AS product_info FROM products;
11. POSITION
POSITION: Trả về vị trí của một chuỗi con trong chuỗi.
Ví dụ:
SELECT email, POSITION('@' IN email) AS at_position FROM customers;
Câu lệnh này sẽ trả về vị trí của ký tự '@' trong email.
12. Challenge: POSITION
- Yêu cầu: Viết truy vấn để lấy tên sản phẩm (product_name) và vị trí của khoảng trắng đầu tiên trong tên sản phẩm từ bảng products.
13. Solution: POSITION
Giải pháp:
SELECT product_name, POSITION(' ' IN product_name) AS space_position FROM products;
14. SUBSTRING
SUBSTRING: Trích xuất một phần của chuỗi.
Ví dụ:
SELECT email, SUBSTRING(email FROM 1 FOR POSITION('@' IN email) - 1) AS username FROM customers;
Câu lệnh này sẽ trả về phần tên người dùng trong email (phần trước ký tự '@').
15. Challenge: SUBSTRING
- Yêu cầu: Viết truy vấn để lấy tên sản phẩm (product_name) và 5 ký tự đầu tiên của tên sản phẩm từ bảng products.
16. Solution: SUBSTRING
Giải pháp:
SELECT product_name, SUBSTRING(product_name FROM 1 FOR 5) AS short_name FROM products;
17. EXTRACT
EXTRACT: Trích xuất phần ngày, tháng, năm từ một giá trị ngày tháng.
Ví dụ:
SELECT order_date, EXTRACT(YEAR FROM order_date) AS order_year FROM orders;
Câu lệnh này sẽ trả về năm của đơn hàng.
18. Challenge: EXTRACT
- Yêu cầu: Viết truy vấn để lấy ngày đặt hàng (order_date) và tháng đặt hàng từ bảng orders.
19. Solution: EXTRACT
Giải pháp:
SELECT order_date, EXTRACT(MONTH FROM order_date) AS order_month FROM orders;
20. TO_CHAR
TO_CHAR: Chuyển đổi giá trị ngày tháng hoặc số thành chuỗi theo định dạng cụ thể.
Ví dụ:
SELECT order_date, TO_CHAR(order_date, 'DD/MM/YYYY') AS formatted_date FROM orders;
Câu lệnh này sẽ trả về ngày đặt hàng dưới dạng "DD/MM/YYYY".
21. Challenge: TO_CHAR
- Yêu cầu: Viết truy vấn để lấy ngày đặt hàng (order_date) và định dạng lại thành "YYYY-MM-DD" từ bảng orders.
22. Solution: TO_CHAR
Giải pháp:
SELECT order_date, TO_CHAR(order_date, 'YYYY-MM-DD') AS formatted_date FROM orders;
23. Intervals & Timestamps
Intervals: Khoảng thời gian.
Timestamps: Thời điểm cụ thể.
Ví dụ:
SELECT order_date, order_date + INTERVAL '1 day' AS next_day FROM orders;
Câu lệnh này sẽ trả về ngày đặt hàng và ngày tiếp theo.
24. Challenge: Intervals & Timestamps
- Yêu cầu: Viết truy vấn để lấy ngày đặt hàng (order_date) và thời điểm 3 giờ sau khi đặt hàng từ bảng orders.
25. Solution: Intervals & Timestamps
Giải pháp:
SELECT order_date, order_date + INTERVAL '3 hours' AS after_3_hours FROM orders;
26. Today's slides
Tổng kết lại các hàm đã học trong ngày hôm nay.
Cung cấp slide tham khảo để bạn ôn tập và thực hành thêm.
27. Today's summary
Hôm nay, bạn đã học:
Cách sử dụng các hàm xử lý chuỗi như LENGTH, LOWER, UPPER, LEFT, RIGHT, CONCAT, POSITION, và SUBSTRING.
Cách sử dụng các hàm xử lý ngày tháng như EXTRACT, TO_CHAR, và Intervals & Timestamps.
Hẹn gặp lại bạn vào ngày 5 với chủ đề Conditional Expressions!
28. Today's challenges
Thử thách 1: Viết truy vấn để lấy tên khách hàng (customer_name) và phần tên miền (domain) trong email từ bảng customers.
Thử thách 2: Viết truy vấn để lấy ngày đặt hàng (order_date) và định dạng lại thành "Tháng Ngày, Năm" (ví dụ: "October 10, 2023") từ bảng orders.
Thử thách 3: Viết truy vấn để lấy tên sản phẩm (product_name) và 10 ký tự đầu tiên của mô tả sản phẩm (description) từ bảng products.