PostgreSQL - Chức năng và Оператор DATE/TIME

Xin chào, các bạn học lập trình! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị qua thế giới ngày và giờ trong PostgreSQL. Là người dạy khoa học máy tính ở khu phố của bạn, tôi ở đây để hướng dẫn các bạn qua những khái niệm này với cùng niềm đam mê mà tôi đã có trong 15 năm dạy học. Vậy, hãy lấy sổ tay ảo của bạn và cùng tôi bắt đầu!

Date/Time Functions & Operators

Hiểu về Ngày và Giờ trong PostgreSQL

Trước khi chúng ta bắt đầu khám phá các hàm và phép toán, hãy dành một chút thời gian để hiểu tại sao ngày và giờ lại quan trọng trong lập trình. Hãy tưởng tượng bạn đang xây dựng một máy thời gian (thật tuyệt phải không?). Bạn cần biết chính xác bạn đang ở thời điểm nào và bạn muốn đi到哪里 (hoặc khi nào). Đó chính là điều chúng ta làm với cơ sở dữ liệu - chúng ta theo dõi khi nào các sự kiện xảy ra, chúng kéo dài bao lâu, và thậm chí dự đoán các sự kiện trong tương lai.

Bây giờ, hãy nhìn vào một số hàm và phép toán ngày và giờ hữu ích nhất trong PostgreSQL.

AGE(timestamp, timestamp) và AGE(timestamp)

Hàm AGE giống như người bạn luôn nhớ rõ bao lâu trước một sự kiện đã xảy ra. Nó tính toán sự khác biệt giữa hai timestamp hoặc giữa một timestamp và ngày hiện tại.

Ví dụ 1: Tính Tuổi

SELECT AGE(TIMESTAMP '2023-05-15', TIMESTAMP '1990-01-01');

Điều này sẽ trả về etwas như:

33 năm 4 tháng 14 ngày

Điều gì đang xảy ra ở đây? Chúng ta đang yêu cầu PostgreSQL tính toán sự khác biệt thời gian giữa ngày 1 tháng 1 năm 1990 và ngày 15 tháng 5 năm 2023. Điều này giống như hỏi, "Người sinh ngày 1 tháng 1 năm 1990 sẽ bao nhiêu tuổi?"

Ví dụ 2: Tính Tuổi từ Ngày Hiện tại

SELECT AGE(TIMESTAMP '1990-01-01');

Điều này sẽ trả về sự khác biệt thời gian giữa ngày 1 tháng 1 năm 1990 và ngày hiện tại. Điều này giống như hỏi, "Người sinh ngày 1 tháng 1 năm 1990 bao nhiêu tuổi?"

Chức năng Ngày/Thời gian Hiện tại

Những hàm này giống như đồng hồ và lịch内置 của cơ sở dữ liệu của bạn. Chúng cho bạn biết thời gian hiện tại.

Ví dụ 3: Lấy Ngày và Thời gian Hiện tại

SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;

Điều này sẽ trả về ngày hôm nay, thời gian hiện tại và cả hai kết hợp lại. Điều này giống như hỏi cơ sở dữ liệu của bạn, "Hôm nay là ngày nào, thời gian hiện tại là bao nhiêu, và chính xác thời điểm hiện tại là gì?"

DATE_PART và DATE_TRUNC Functions

DATE_PART giống như một máy thời gian có thể phóng to vào các phần cụ thể của ngày hoặc giờ. DATE_TRUNC, mặt khác, giống như một bộ điều chỉnh thời gian - nó làm tròn xuống một đơn vị thời gian xác định.

Ví dụ 4: Trích xuất Phần của Ngày

SELECT DATE_PART('year', TIMESTAMP '2023-05-15 10:30:00');
SELECT DATE_PART('hour', TIMESTAMP '2023-05-15 10:30:00');

Truy vấn đầu tiên sẽ trả về 2023, và truy vấn thứ hai sẽ trả về 10. Điều này giống như hỏi, "Năm nào của timestamp này?" và "Giờ nào trong ngày của timestamp này?"

Ví dụ 5: Làm Tròn Timestamp

SELECT DATE_TRUNC('hour', TIMESTAMP '2023-05-15 10:30:00');

Điều này sẽ trả về '2023-05-15 10:00:00'. Điều này giống như nói, "Cho tôi timestamp này, nhưng đặt phút và giây về zero."

Chức năng EXTRACT

EXTRACT tương tự như DATE_PART, nhưng với cú pháp hơi khác. Đây là một cách khác để kéo ra phần cụ thể của ngày hoặc giờ.

Ví dụ 6: Trích xuất từ Timestamp

SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:00');
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-15 10:30:00');

Những truy vấn này sẽ trả về 2023 và 10, tương ứng, giống như các ví dụ DATE_PART của chúng ta.

Chức năng ISFINITE

Những hàm này giống như một bài kiểm tra thực tế của cơ sở dữ liệu của bạn. Chúng cho bạn biết liệu một ngày, timestamp hoặc khoảng thời gian có phải là một giá trị hữu hạn hay không, hoặc liệu nó có phải là một trong những giá trị vô cực đặc biệt hay không.

Ví dụ 7: Kiểm tra Hữu hạn

SELECT ISFINITE(DATE '2023-05-15');
SELECT ISFINITE(TIMESTAMP 'infinity');

Truy vấn đầu tiên sẽ trả về true, trong khi truy vấn thứ hai sẽ trả về false. Điều này giống như hỏi, "Ngày 15 tháng 5 năm 2023 có phải là một ngày thực tế?" (có) và "Vô cực có phải là một timestamp thực tế?" (không).

Chức năng JUSTIFY

Những hàm này giống như bộ điều chỉnh thời gian của cơ sở dữ liệu của bạn. Chúng lấy các khoảng thời gian có thể có giá trị kỳ lạ và điều chỉnh chúng thành các biểu diễn tiêu chuẩn hơn.

Ví dụ 8: Điều chỉnh Khoảng Thời gian

SELECT JUSTIFY_DAYS(INTERVAL '30 days');
SELECT JUSTIFY_HOURS(INTERVAL '36 hours');
SELECT JUSTIFY_INTERVAL(INTERVAL '1 month 36 hours');

Những điều này có thể trả về:

1 tháng
1 ngày 12 giờ
1 tháng 1 ngày 12 giờ

Điều này giống như nói, "Nhận các khoảng thời gian này và biểu diễn chúng theo cách tiêu chuẩn hơn."

Tóm tắt các Chức năng

Dưới đây là bảng tóm tắt tất cả các hàm chúng ta đã thảo luận:

Hàm Mô tả
AGE() Tính toán sự khác biệt giữa các timestamp
CURRENT_DATE Trả về ngày hiện tại
CURRENT_TIME Trả về thời gian hiện tại
CURRENT_TIMESTAMP Trả về ngày và thời gian hiện tại
DATE_PART() Trích xuất một phần cụ thể của ngày/giờ
DATE_TRUNC() Làm tròn một timestamp đến độ chính xác xác định
EXTRACT() Trích xuất một trường cụ thể từ ngày/giờ
ISFINITE() Kiểm tra xem ngày/giờ/khoảng thời gian có hữu hạn hay không
JUSTIFY_DAYS() Điều chỉnh ngày trong một khoảng thời gian
JUSTIFY_HOURS() Điều chỉnh giờ trong một khoảng thời gian
JUSTIFY_INTERVAL() Điều chỉnh toàn bộ khoảng thời gian

Và thế là bạn đã có, các bạn! Chúng ta đã cùng nhau đi qua thời gian (hàm) cùng nhau, trích xuất các phần của ngày, kiểm tra hữu hạn của vô cực, và thậm chí điều chỉnh các khoảng thời gian. Nhớ rằng, làm việc với ngày và giờ trong cơ sở dữ liệu rất quan trọng cho nhiều ứng dụng, từ theo dõi hoạt động của người dùng đến lập lịch sự kiện.

Khi bạn tiếp tục hành trình lập trình của mình, bạn sẽ thấy những hàm này rất hữu ích. Chúng giống như瑞士军刀 của thời gian trong bộ công cụ cơ sở dữ liệu của bạn. Hãy tiếp tục thực hành, tiếp tục khám phá, và trước khi bạn biết, bạn sẽ trở thành một chúa tể thời gian trong thế giới cơ sở dữ liệu!

Credits: Image by storyset