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.