Bắt đầu với một sự thật đơn giản nhưng cực kỳ quan trọng: dữ liệu thường "thô" và khó đọc. Một đống số, ngày tháng hay chuỗi chưa xử lý sẽ rất khó hiểu. Hãy tưởng tượng một báo cáo mà ngày tháng được ghi theo nhiều kiểu khác nhau: có cái là 01/02/2023, có cái lại là 2023-02-01. Ngay cả mấy bạn phân tích dữ liệu kỹ tính cũng dễ bị rối. Đó là lúc định dạng dữ liệu phát huy sức mạnh thần kỳ.
Định dạng dữ liệu giúp bạn:
- Chuyển dữ liệu sang dạng dễ đọc, làm việc với nó cũng nhẹ nhàng hơn.
- Trở thành dân hack dữ liệu khi phân tích, lấy thông tin cần thiết cực nhanh.
- Chuẩn bị dữ liệu để export hoặc tích hợp với hệ thống khác.
- Làm báo cáo và biểu đồ dễ đọc và chính xác.
Ví dụ, bạn làm ở trường đại học và cần tạo báo cáo liệt kê tất cả sinh viên với họ tên đầy đủ, ngày sinh và khoa. Thay vì ngồi ghép tay từng trường dữ liệu, bạn dùng truy vấn có định dạng, nối họ và tên vào một cột, ngày sinh thì hiển thị kiểu dễ hiểu, ví dụ 12 tháng 3 2001.
Nhiệm vụ chính của định dạng dữ liệu
Định dạng dữ liệu giống như cắt trái cây làm salad vậy. Không chỉ vứt hết trái cây vào tô mà còn phải cắt đẹp, bày lên đĩa cho hấp dẫn. Trong SQL, công việc này chia thành mấy loại:
Định dạng chuỗi
Có thể là nối chuỗi, đổi chữ hoa/thường, thêm hoặc xóa khoảng trắng và ký tự.
Định dạng số
Đôi khi cần chuyển số thành chuỗi hoặc làm tròn số đến số lẻ mong muốn.
Làm việc với ngày giờ
Có thể tự động lấy ngày hiện tại, định dạng dữ liệu thời gian hoặc lấy một phần của ngày (ví dụ chỉ lấy năm hoặc tháng).
Lấy giá trị duy nhất
Nếu báo cáo cần chỉ hiển thị các bản ghi duy nhất (ví dụ các thành phố hoặc khoa không trùng), thì cũng là định dạng dữ liệu luôn.
Công cụ định dạng trong PostgreSQL
PostgreSQL có sẵn rất nhiều hàm để xử lý dữ liệu. Đây là một số thứ mà tụi mình sẽ nói kỹ hơn ở các bài sau:
Định dạng chuỗi
CONCAT(): nối chuỗi.UPPER(),LOWER(): đổi chữ hoa/thường.
Định dạng ngày giờ
NOW(): lấy ngày giờ hiện tại.CURRENT_DATE: lấy ngày hiện tại (không có giờ).DATE_PART(): lấy một phần ngày, ví dụ năm hoặc tháng.
Chuyển đổi kiểu dữ liệu
CAST(): đổi kiểu dữ liệu.- Cú pháp:
<giá trị>::<kiểu>.
Sắp xếp dữ liệu
ORDER BY: sắp xếp dữ liệu theo một hoặc nhiều cột.DISTINCT: lấy giá trị duy nhất.
Ví dụ định dạng dữ liệu: thực tế trông thế nào?
Cho bạn dễ hình dung, mình sẽ lấy vài ví dụ nhé. Bắt đầu từ cái đơn giản nhất.
Ví dụ 1: Định dạng chuỗi
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
Truy vấn này nối first_name và last_name thành một cột full_name. Ví dụ tên sinh viên là "Otto", họ là "Art", kết quả sẽ là: "Otto Art".
Ví dụ 2: Định dạng ngày tháng
SELECT DATE_PART('year', date_of_birth) AS birth_year
FROM students;
Ở đây mình chỉ lấy năm sinh từ cột date_of_birth. Nếu ngày sinh trong database là 2001-03-15, kết quả sẽ là 2001.
Ví dụ 3: Chuyển đổi kiểu dữ liệu
SELECT birth_year::text || ' năm' AS formatted_year
FROM (
SELECT DATE_PART('year', date_of_birth) AS birth_year
FROM students
) subquery;
Trong truy vấn này, đầu tiên mình lấy năm sinh, sau đó chuyển nó thành chuỗi và thêm chuỗi " năm". Ví dụ kết quả sẽ là: 2001 năm.
Ứng dụng thực tế ở đâu?
Báo cáo cho quản lý
Không phải ai cũng thích nhìn dữ liệu "thô". Ví dụ, báo cáo doanh thu nên ghi số tiền có dấu phân cách hàng nghìn (1,000,000 thay vì 1000000), ngày tháng thì kiểu 21 FEB 2025.
Báo cáo cho khách hàng
Ví dụ, email gửi khách: "Kính gửi [Họ Tên], đơn hàng N123 của bạn đã được giao thành công ngày 12 tháng 10 năm 2023".
Tích hợp với hệ thống khác
Một số form nhập liệu yêu cầu định dạng dữ liệu nhất định: ngày tháng kiểu ISO, chuỗi phải đúng chữ hoa/thường, số phải làm tròn.
Phân tích và trực quan hóa
Hãy tưởng tượng bạn vẽ biểu đồ hoặc đồ thị. Nếu không định dạng, biểu đồ sẽ rất khó nhìn và dễ sai.
GO TO FULL VERSION