Trong PostgreSQL, date_trunc()
hàm cắt bớt một giá trị ngày / giờ thành một độ chính xác được chỉ định.
Nó cũng có thể cắt ngắn giá trị đến một độ chính xác được chỉ định trong một múi giờ cụ thể.
Bạn có thể coi nó như một phiên bản ngày của trunc()
hàm (cắt bớt số).
Cú pháp
Cú pháp như sau:
date_trunc(field, source [, time_zone ])
Ở đâu:
-
field
là độ chính xác để cắt bớt giá trị đầu vào (ví dụ:month
,hour
, vân vân). Xem bên dưới để biết danh sách đầy đủ các giá trị được chấp nhận cho đối số này. -
source
là một biểu thức giá trị của loại dấu thời gian , dấu thời gian với múi giờ hoặc khoảng thời gian . Lưu ý rằng các giá trị thuộc loại ngày và thời gian được truyền tự động tới dấu thời gian hoặc khoảng thời gian tương ứng. -
time_zone
tùy chọn có thể cung cấp đối số để chỉ định múi giờ khác.
field
đối số có thể là bất kỳ đối số nào sau đây:
- micro giây
- mili giây
- thứ hai
- phút
- giờ
- ngày
- tuần
- tháng
- quý
- năm
- thập kỷ
- thế kỷ
- thiên niên kỷ
Ví dụ cơ bản
Đây là một ví dụ để chứng minh.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');
Kết quả:
2020-06-30 17:00:00
Chúng ta có thể thấy rằng phần thời gian của ngày đã bị cắt bớt từ 17:29:31
đến 17:00:00
. Đó là vì tôi đã sử dụng hour
cho đối số đầu tiên.
Đây là nó với các giá trị khác nhau cho đối số đầu tiên.
\x
SELECT
date_trunc('minute', timestamp '2020-06-30 17:29:31'),
date_trunc('day', timestamp '2020-06-30 17:29:31'),
date_trunc('month', timestamp '2020-06-30 17:29:31'),
date_trunc('year', timestamp '2020-06-30 17:29:31');
Kết quả (sử dụng đầu ra dọc):
date_trunc | 2020-06-30 17:29:00 date_trunc | 2020-06-30 00:00:00 date_trunc | 2020-06-01 00:00:00 date_trunc | 2020-01-01 00:00:00
Trong trường hợp này, tôi đã sử dụng \x
để cho phép hiển thị mở rộng / đầu ra dọc, để đọc kết quả dễ dàng hơn.
Với Múi giờ
Dưới đây là một ví dụ để chứng minh WITH TIME ZONE
tùy chọn.
SELECT
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+00'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+01');
Kết quả:
date_trunc | 2020-07-01 03:00:00+10 date_trunc | 2020-07-01 02:00:00+10
Múi giờ địa phương khi tôi chạy các ví dụ này là Úc / Brisbane.
Bạn cũng có thể thêm tên múi giờ đầy đủ làm đối số thứ ba.
SELECT
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland');
Kết quả:
date_trunc | 2020-06-30 15:00:00+10 date_trunc | 2020-06-30 15:00:00+10
Có khoảng thời gian
Dưới đây là một ví dụ sử dụng giá trị khoảng thời gian thay vì ngày.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');
Kết quả:
7 days, 5:00:00