Vấn đề:
Bạn muốn nhận ngày và giờ hiện tại với thông tin múi giờ từ cơ sở dữ liệu PostgreSQL.
Giải pháp:
Chúng tôi sẽ sử dụng CURRENT_TIMESTAMP hoặc NOW () để lấy ngày và giờ hiện tại với chênh lệch múi giờ.
SELECT CURRENT_TIMESTAMP ;
Đây là kết quả của truy vấn:
2019-09-15 13:13:12.118432+02
Thảo luận:
CURRENT_TIMESTAMP
trả về độ lệch ngày, giờ và múi giờ hiện tại (sử dụng ngày, giờ và múi giờ của máy mà PostgreSQL đang chạy). Giá trị này được trả về dưới dạng giá trị trong 'YYYY-MM-DD hh:mm:ss.nnnnnn +/- tz' định dạng. Ở định dạng này:
- YYYY là năm có 4 chữ số.
- MM là tháng có 2 chữ số.
- DD là ngày có 2 chữ số trong tháng.
- hh là một giờ có 2 chữ số.
- mm là phút có 2 chữ số.
- ss là một giây có 2 chữ số.
- nnnnnn xác định số giây phân số (tức là độ chính xác) từ 0 đến 6.
- + tz hoặc -tz là độ lệch múi giờ, cộng hoặc trừ so với UTC.
Như bạn nhận thấy, hàm này không có dấu ngoặc. Tuy nhiên, nếu bạn muốn hiển thị ngày và giờ với độ chính xác cụ thể, bạn có thể sử dụng đối số số nguyên tùy chọn. Nó trả về ngày và giờ với giây phân số và độ lệch múi giờ. Đối số này phải nằm trong khoảng từ 0 đến 6; 0 không phải là giây phân số, 1 là một giây phân số (ví dụ:một vị trí sau số thập phân), v.v. Hãy xem ví dụ tiếp theo:
SELECT CURRENT_TIMESTAMP(3) ;
Đây là kết quả của truy vấn:
2019-09-15 13:01:51.142+02
Kết quả này chứa phân số thứ hai gồm 3 chữ số vì chúng tôi đặt 3 làm đối số trong hàm CURRENT_TIMESTAMP. Chênh lệch múi giờ vẫn xuất hiện ở cuối.
Thời gian được trả về bởi hàm này không thay đổi trong các giao dịch hoặc một truy vấn. Nó luôn luôn là thời điểm mà giao dịch bắt đầu.
NOW () tương tự như CURRENT_TIMESTAMP
và trả về cùng một kết quả. Sự khác biệt là CURRENT_TIMESTAMP
là hàm tiêu chuẩn của SQL, trong khi NOW () dành riêng cho PostgreSQL.
SELECT NOW() ;
Đây là kết quả của truy vấn:
2019-08-27 12:18:55.324145+02
Lưu ý rằng hàm NOW () yêu cầu dấu ngoặc. Tuy nhiên, bạn có thể để trống chúng và lấy giá trị mặc định.
CURRENT_TIMESTAMP và NOW () trả về dấu thời gian kiểu dữ liệu.