CodeGym /Các khóa học /SQL SELF /Kiểu dữ liệu để làm việc với ngày và giờ: DATE

Kiểu dữ liệu để làm việc với ngày và giờ: DATE, TIME, TIMESTAMP

SQL SELF
Mức độ , Bài học
Có sẵn

Bạn đã từng gặp app nào mà không đụng tới ngày giờ chưa? Đặt hàng online, lịch biểu, lịch sử thay đổi trong database — tất cả đều phụ thuộc vào việc lưu trữ thời gian cho chuẩn. PostgreSQL cho bạn công cụ cực mạnh để xử lý mấy kiểu dữ liệu này, và tất nhiên, bảng thời gian không phải mấy cái bảng đồng hồ đâu, mà là cấu trúc rõ ràng để phân tích và sắp xếp sự kiện.

Các kiểu ngày giờ cho phép bạn:

  • Lưu chỉ ngày DATE, chỉ giờ TIME hoặc cả hai cùng lúc TIMESTAMP.
  • Làm các phép toán như cộng ngày, tính chênh lệch giữa các ngày và lọc bản ghi theo tiêu chí thời gian.
  • Làm việc với múi giờ (nhưng cái này để bài sau nói kỹ hơn nha).

Các kiểu dữ liệu: DATE, TIME, TIMESTAMP

Kiểu dữ liệu DATE

Kiểu DATE dùng để lưu chỉ ngày thôi, không có giờ. Nó lưu năm, tháng, ngày. Dùng kiểu này khi:

  • Cần lưu ngày sinh của user.
  • Ngày sự kiện quan trọng, còn giờ thì không quan tâm.

Ví dụ format: YYYY-MM-DD (năm-tháng-ngày).

Ví dụ:

id name - VARCHAR(100) event_date - DATE
1 SQL Workshop 2025-06-15
2 Python 2025-06-17
3 Java Courses 2025-06-25

Kiểu dữ liệu TIME

Kiểu TIME dùng để lưu chỉ giờ thôi. Dùng khi:

  • Cần lưu lịch biểu, ví dụ giờ bắt đầu làm việc.
  • Giờ quan trọng, còn ngày thì không cần.

Ví dụ format: HH:MI:SS (giờ:phút:giây).

Ví dụ:

id task_name - VARCHAR(100) start_time - TIME
1 Team Meeting 09:00:00
2 Code Review 11:30:00
3 Client Call 15:00:00

Kiểu dữ liệu TIMESTAMP

TIMESTAMP là kết hợp ngày và giờ. Dùng khi:

  • Cần lưu khoảnh khắc cụ thể, ví dụ lúc user đăng nhập.
  • Cần dấu thời gian để tracking thay đổi (logging).

Ví dụ format: YYYY-MM-DD HH:MI:SS (năm-tháng-ngày giờ:phút:giây).

Ví dụ:

id action - VARCHAR(100) login_time - TIMESTAMP
1 User Login 2023-10-15 14:30:00
2 File Uploaded 2023-10-15 15:10:00
3 User Logout 2023-10-15 16:45:00

Thao tác với ngày và giờ

Giờ khi đã biết có những kiểu nào rồi, cùng xem cách dùng tụi nó nha. PostgreSQL có sẵn nhiều hàm để thao tác với ngày giờ luôn.

Lấy từng phần của ngày và giờ

Nếu bạn có một timestamp (TIMESTAMP), và muốn lấy riêng năm, tháng, ngày hoặc giờ, dùng hàm EXTRACT nha.

Ví dụ:

SELECT EXTRACT(YEAR FROM TIMESTAMP '2025-06-15 14:30:00') AS year;
-- Kết quả: 2025

SELECT EXTRACT(MONTH FROM TIMESTAMP '2025-06-15 14:30:00') AS month;
-- Kết quả: 06

SELECT EXTRACT(DAY FROM TIMESTAMP '2025-06-15 14:30:00') AS day;
-- Kết quả: 15

Cộng trừ khoảng thời gian

Muốn biết tuần sau là ngày nào? Hay hôm qua là ngày nào? Dùng phép toán với interval nha.

Ví dụ:

-- Cộng 7 ngày vào ngày hiện tại
SELECT CURRENT_DATE + INTERVAL '7 days' AS next_week;

-- Trừ 1 tháng
SELECT CURRENT_DATE - INTERVAL '1 month' AS last_month;

So sánh ngày

Làm sao biết sự kiện đã xảy ra chưa? Dễ hơn debug bug luôn — chỉ cần so sánh giá trị thôi.

Ví dụ:

SELECT event_date
FROM events
WHERE event_date < CURRENT_DATE;
-- Lấy tất cả sự kiện trong quá khứ

Chi tiết về các hàm xử lý ngày giờ sẽ có ở các bài sau. Giờ chỉ cần nhớ là có mấy kiểu này là đủ rồi nha.

Vấn đề múi giờ và chuẩn thời gian

Dù bài này chưa đi sâu vào múi giờ, nhưng cũng phải nhắc là PostgreSQL hỗ trợ kiểu TIMESTAMPTZ (timestamp có múi giờ). Ví dụ, 2023-10-15 14:30:00+02 nghĩa là thời gian này thuộc múi giờ UTC+2.

Chắc chắn tụi mình sẽ học kỹ vụ này trong khoá, nhưng để sau nha :P

Ví dụ

Giờ là lúc test thử kiến thức mới học. Tạo bảng lưu lịch học của sinh viên nha.

id subject_name class_date - DATE start_time - TIME end_time - TIME created_at - TIMESTAMP
1 Mathematics 2023-10-16 09:00:00 10:30:00 2023-10-12 14:00:00
2 Physics 2023-10-16 11:00:00 12:30:00 2023-10-12 14:00:00
3 Chemistry 2023-10-17 09:00:00 10:30:00 2023-10-12 14:01:00
4 Literature 2023-10-17 11:00:00 12:30:00 2023-10-12 14:01:00
5 Computer Science 2023-10-18 10:00:00 11:30:00 2023-10-12 14:02:00

Chỉ vài bài nữa là bạn sẽ tự tạo được bảng kiểu này bằng SQL query luôn. Giờ thì cứ ngắm nghía trước đã :)

Lỗi thường gặp

Định dạng ngày giờ: khi insert dữ liệu nhớ đúng format: YYYY-MM-DD cho ngày và HH:MI:SS cho giờ. PostgreSQL sẽ không hiểu nếu bạn thử insert kiểu "15/10/2023" đâu nha.

Sai kiểu dữ liệu: thử ghi giá trị text vào trường kiểu DATE là lỗi liền.

Lỗi khoảng thời gian: ví dụ bạn cộng 30 ngày vào tháng 2, PostgreSQL sẽ xử lý đúng, nhưng ngày kết quả có thể đã sang tháng 3 rồi.

Giờ bạn đã biết về các kiểu dữ liệu ngày giờ trong PostgreSQL rồi đó. Trong project thực tế, nó giúp bạn xử lý lịch biểu, log sự kiện hoặc tracking các sự kiện quan trọng trong hệ thống luôn!

1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Kiểu dữ liệu số
Kiểu dữ liệu số
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION