Theo tài liệu PostgreSQL, có hai hàm được gọi là to_timestamp()
:
- Một chuyển đổi kỷ nguyên Unix thành dấu thời gian. Kỷ nguyên Unix là số giây kể từ 1970-01-01 00:00:00 + 00.
- Cái kia chuyển đổi một chuỗi thành dấu thời gian.
Cụ thể hơn, mỗi hàm chuyển đổi giá trị thành dấu thời gian với múi giờ giá trị.
Mặc dù tài liệu Postgres trình bày chúng dưới dạng hai to_timestamp()
riêng biệt , tôi trình bày chúng như thể chúng là một hàm chấp nhận một hoặc hai đối số.
Cú pháp
Bạn có thể sử dụng to_timestamp()
theo những cách sau:
to_timestamp(double precision)
to_timestamp(text, text)
Sử dụng cú pháp đầu tiên, đối số được cung cấp dưới dạng độ chính xác kép và nó là giá trị Epoch, với độ chính xác gấp đôi mà bạn muốn chuyển đổi thành dấu thời gian.
Sử dụng cú pháp thứ hai, đối số đầu tiên là ngày và đối số thứ hai là chuỗi định dạng.
Chuyển đổi Kỷ nguyên Unix
Dưới đây là một ví dụ cơ bản để minh họa cách chuyển đổi Kỷ nguyên thành dấu thời gian.
SELECT to_timestamp(1658792421);
Kết quả:
2022-07-26 09:40:21+10
Trong trường hợp của tôi, chênh lệch múi giờ là +10 và đó là giá trị được trả về.
Giây phân số
Dưới đây là một ví dụ với giây phân số.
SELECT to_timestamp(1658792421.123456);
Kết quả:
2022-07-26 09:40:21.123456+10
Định dạng
Dưới đây là một ví dụ về việc sử dụng cú pháp thứ hai để định dạng giá trị ngày.
SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');
Kết quả:
2022-10-21 00:00:00+10
Đối số thứ hai được cung cấp để cho biết cách đối số đầu tiên được định dạng.
Đây là một định dạng khác để minh họa thêm điểm này.
SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');
Kết quả:
2022-10-21 00:00:00+10
Nếu định dạng của đối số thứ hai không khớp với định dạng của đối số đầu tiên, bạn có thể gặp lỗi.
Ví dụ:
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
Kết quả:
ERROR: invalid value "ober" for "YYYY" DETAIL: Value must be an integer.
Chuỗi định dạng (đối số thứ hai) có thể là bất kỳ mẫu mẫu nào với công cụ sửa đổi tùy chọn.
Dưới đây là danh sách đầy đủ các mẫu và công cụ sửa đổi mẫu mà bạn có thể sử dụng với chức năng này.
Loại trả lại
Như đã đề cập, loại trả về là dấu thời gian với múi giờ . Chúng tôi có thể xác minh điều này bằng pg_typeof()
chức năng.
SELECT pg_typeof(to_timestamp(1658792421.123456));
Kết quả:
timestamp with time zone
Trích xuất phần ngày
Bạn có thể sử dụng các phương pháp khác nhau để trích xuất các phần ngày từ giá trị dấu thời gian.
Ví dụ:bạn có thể sử dụng extract()
chức năng.
SELECT extract('month' from to_timestamp(1658792421));
Kết quả:
7
Và bạn có thể sử dụng to_char()
nếu bạn cần làm điều gì đó như, hiển thị tên tháng thay vì số tháng.
SELECT to_char(to_timestamp(1658792421), 'Month');
Kết quả:
July
Và đây nó đang sử dụng cú pháp định dạng.
SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');
Kết quả:
October
Nếu bạn chỉ có số tháng, bạn có thể sử dụng ví dụ sau để chuyển đổi số tháng thành tên tháng.
SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');
Kết quả:
March
Và ngược lại (chuyển đổi tên tháng thành số tháng).
Trong ví dụ sau, tôi trích xuất số tháng bằng cách sử dụng date_part()
thay thế cho extract()
.
SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));
Kết quả:
3