Hướng dẫn cơ bản về Ngày và Giờ trong PL/SQL
Xin chào các pháp sư tương lai của PL/SQL! Hôm nay, chúng ta sẽ bắt đầu một hành trình đầy thú vị qua thế giới của ngày và giờ trong PL/SQL. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ cùng nhau bước từng bước. Cuối cùng của bài hướng dẫn này, bạn sẽ có thể xử lý ngày và giờ như một chuyên gia!
Hiểu về Ngày và Giờ trong PL/SQL
Trước khi chúng ta đi vào chi tiết, hãy nói về tầm quan trọng của ngày và giờ trong lập trình. Hãy tưởng tượng bạn đang xây dựng một ứng dụng nhắc nhở sinh nhật hoặc một hệ thống đặt vé máy bay. Bạn sẽ cần phải làm việc với ngày tháng liên tục! Đó là lúc các hàm ngày và giờ của PL/SQL phát huy tác dụng.
Một bài học lịch sử ngắn
Bạn có biết rằng Oracle, công ty đứng sau PL/SQL, đã xử lý ngày tháng từ những năm 1970 không? Điều đó còn cũ hơn nhiều người trong số các bạn đang đọc này! Trong nhiều năm, họ đã cải tiến cách xử lý ngày và giờ để trở nên chính xác và linh hoạt hơn.
Giá trị trường cho các kiểu dữ liệuDatetime và Interval
Hãy bắt đầu từ cơ bản. Trong PL/SQL, chúng ta có hai nhóm chính để xử lý thời gian: Datetime và Interval.
Kiểu dữ liệu Datetime
Kiểu dữ liệu Datetime đại diện cho một điểm cụ thể trong thời gian. Hãy nghĩ của chúng như những bức ảnh chụp. Các kiểu dữ liệu datetime chính là:
- DATE
- TIMESTAMP
- TIMESTAMP WITH TIME ZONE
- TIMESTAMP WITH LOCAL TIME ZONE
Kiểu dữ liệu Interval
Kiểu dữ liệu Interval đại diện cho một khoảng thời gian. Hãy nghĩ của chúng như là đo khoảng cách giữa hai điểm trong thời gian. Các kiểu dữ liệu interval chính là:
- INTERVAL YEAR TO MONTH
- INTERVAL DAY TO SECOND
Hãy xem bảng tóm tắt các kiểu dữ liệu này:
Kiểu dữ liệu | Mô tả | Ví dụ |
---|---|---|
DATE | Ngày với thiên niên kỷ, năm, tháng, ngày, giờ, phút và giây | 01-JAN-2023 12:00:00 |
TIMESTAMP | Ngày và giờ với giây phần thập phân | 01-JAN-2023 12:00:00.000000 |
TIMESTAMP WITH TIME ZONE | Timestamp với múi giờ | 01-JAN-2023 12:00:00.000000 -05:00 |
TIMESTAMP WITH LOCAL TIME ZONE | Timestamp tương đối với múi giờ của phiên | 01-JAN-2023 12:00:00.000000 |
INTERVAL YEAR TO MONTH | Khoảng thời gian trong năm và tháng | INTERVAL '1-3' YEAR TO MONTH |
INTERVAL DAY TO SECOND | Khoảng thời gian trong ngày, giờ, phút và giây | INTERVAL '2 12:30:00' DAY TO SECOND |
Các Kiểu dữ liệu Datetime và Hàm
Bây giờ chúng ta đã biết什么是 datetime types, hãy học cách sử dụng chúng!
Làm việc với DATE
Kiểu DATE là loại được sử dụng phổ biến nhất. Nó lưu trữ thiên niên kỷ, năm, tháng, ngày, giờ, phút và giây.
Hãy xem một số ví dụ:
-- Lấy ngày hiện tại
SELECT SYSDATE FROM DUAL;
-- Thêm 7 ngày vào ngày hiện tại
SELECT SYSDATE + 7 FROM DUAL;
-- Lấy sự khác biệt giữa hai ngày
SELECT TO_DATE('2023-12-31', 'YYYY-MM-DD') - SYSDATE AS days_until_new_year FROM DUAL;
Trong ví dụ đầu tiên, chúng ta sử dụng SYSDATE để lấy ngày hiện tại. Điều này giống như hỏi máy tính của bạn, "Hôm nay là ngày nào?"
Ví dụ thứ hai cho thấy cách dễ dàng để thực hiện phép toán ngày. Chúng ta đang thêm 7 ngày vào ngày hôm nay. Hãy tưởng tượng bạn đang lên kế hoạch cho một kỳ nghỉ một tuần - điều này sẽ rất hữu ích!
Ví dụ thứ ba tính toán số ngày còn lại cho đến đêm giao thừa. Chúng ta sử dụng TO_DATE để chuyển đổi một chuỗi thành ngày, sau đó trừ đi ngày hôm nay.
Làm việc với TIMESTAMP
TIMESTAMP giống như người cousin chính xác hơn của DATE. Nó bao gồm các giây phần thập phân, điều này rất tốt khi bạn cần theo dõi thời gian đến microsecond.
-- Lấy timestamp hiện tại
SELECT SYSTIMESTAMP FROM DUAL;
-- Thêm 3 giờ vào timestamp hiện tại
SELECT SYSTIMESTAMP + INTERVAL '3' HOUR FROM DUAL;
-- Lấy chỉ phần ngày từ timestamp
SELECT TRUNC(SYSTIMESTAMP) FROM DUAL;
SYSTIMESTAMP cho chúng ta biết ngày và giờ hiện tại với độ chính xác microsecond. Điều này giống như mang theo một chiếc đồng hồ siêu chính xác trên cổ tay của bạn!
Ví dụ thứ hai cho thấy cách chúng ta có thể thêm các khoảng thời gian vào một timestamp. Điều này có thể hữu ích trong một kịch bản nơi bạn đang theo dõi thời gian hoàn thành một quy trình.
Ví dụ cuối cùng sử dụng TRUNC để loại bỏ phần thời gian khỏi một timestamp, cho chúng ta chỉ phần ngày. Điều này rất hữu ích khi bạn chỉ quan tâm đến ngày, không phải thời gian chính xác.
Các Kiểu dữ liệu Interval và Hàm
Khoảng thời gian rất tốt để đo lường khoảng thời gian. Hãy xem chúng trong hành động!
INTERVAL YEAR TO MONTH
Kiểu interval này hoàn hảo để đo lường khoảng thời gian dài hơn, như tuổi hoặc thời gian hợp đồng.
-- Tính tuổi
SELECT
'John Doe' AS name,
TO_DATE('1990-05-15', 'YYYY-MM-DD') AS birthdate,
SYSDATE AS current_date,
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM TO_DATE('1990-05-15', 'YYYY-MM-DD'))
|| ' years ' ||
EXTRACT(MONTH FROM SYSDATE) - EXTRACT(MONTH FROM TO_DATE('1990-05-15', 'YYYY-MM-DD'))
|| ' months' AS age
FROM DUAL;
Ví dụ này tính toán tuổi của một người trong năm và tháng. Chúng ta sử dụng EXTRACT để lấy phần năm và tháng của các ngày, sau đó thực hiện phép toán đơn giản. Điều này giống như魔法 - nhưng nó chỉ là sử dụng PL/SQL khéo léo!
INTERVAL DAY TO SECOND
Kiểu interval này rất tốt để đo lường khoảng thời gian ngắn hơn, như thời gian hoàn thành một nhiệm vụ.
-- Tính thời gian hoàn thành một nhiệm vụ
DECLARE
start_time TIMESTAMP;
end_time TIMESTAMP;
duration INTERVAL DAY TO SECOND;
BEGIN
start_time := SYSTIMESTAMP;
-- Simulate a task that takes some time
DBMS_SESSION.SLEEP(5);
end_time := SYSTIMESTAMP;
duration := end_time - start_time;
DBMS_OUTPUT.PUT_LINE('Task duration: ' || duration);
END;
/
Trong ví dụ này, chúng ta đang đo lường thời gian hoàn thành một nhiệm vụ. Chúng ta ghi lại thời gian bắt đầu, thực hiện một điều gì đó (trong trường hợp này, chúng ta chỉ chờ đợi 5 giây bằng DBMS_SESSION.SLEEP), sau đó ghi lại thời gian kết thúc. Sự khác biệt cho chúng ta biết thời gian hoàn thành nhiệm vụ.
Kết luận
Chúc mừng! Bạn vừa bước những bước đầu tiên vào thế giới ngày và giờ trong PL/SQL. Chúng ta đã覆盖 các dữ liệu cơ bản, thấy cách làm việc với ngày và timestamp, và thậm chí còn thử nghiệm với interval.
Nhớ rằng, thực hành làm nên perfect. Hãy thử nghiệm với các ví dụ này, thay đổi chúng và xem会发生什么. Trước khi bạn biết điều đó, bạn sẽ có thể xử lý ngày và giờ như một lập trình viên có kinh nghiệm!
Tiếp tục mã hóa, tiếp tục học hỏi, và quan trọng nhất, hãy vui vẻ! Bởi vì thời gian trôi nhanh khi bạn vui vẻ với PL/SQL! ?
Credits: Image by storyset