PostgreSQL - Các hàm và toán tử DATE / TIME
Chúng ta đã thảo luận về các kiểu dữ liệu Ngày / Giờ trong chương Các kiểu dữ liệu . Bây giờ, chúng ta hãy xem các toán tử Ngày / Giờ và Hàm.
Bảng sau liệt kê các hành vi của các toán tử số học cơ bản:
Nhà điều hành | Thí dụ | Kết quả |
---|---|---|
+ | ngày '2001-09-28' + số nguyên '7' | ngày '2001-10-05' |
+ | ngày '2001-09-28' + khoảng thời gian '1 giờ' | dấu thời gian '2001-09-28 01:00:00' |
+ | ngày '2001-09-28' + giờ '03: 00 ' | dấu thời gian '2001-09-28 03:00:00' |
+ | khoảng thời gian '1 ngày' + khoảng thời gian '1 giờ' | khoảng thời gian '1 ngày 01:00:00' |
+ | dấu thời gian '2001-09-28 01:00' + khoảng thời gian '23 giờ' | dấu thời gian '2001-09-29 00:00:00' |
+ | thời gian '01: 00 '+ khoảng thời gian' 3 giờ ' | thời gian '04: 00: 00 ' |
- | - khoảng thời gian '23 giờ' | khoảng thời gian '-23: 00: 00' |
- | ngày '2001-10-01' - ngày '2001-09-28' | số nguyên '3' (ngày) |
- | ngày '2001-10-01' - số nguyên '7' | ngày '2001-09-24' |
- | ngày '2001-09-28' - khoảng thời gian '1 giờ' | dấu thời gian '2001-09-27 23:00:00' |
- | time '05: 00 '- time '03: 00' | khoảng thời gian '02: 00: 00 ' |
- | thời gian '05: 00 '- khoảng thời gian' 2 giờ ' | thời gian '03: 00: 00 ' |
- | dấu thời gian '2001-09-28 23:00' - khoảng thời gian '23 giờ' | dấu thời gian '2001-09-28 00:00:00' |
- | khoảng thời gian '1 ngày' - khoảng thời gian '1 giờ' | khoảng thời gian '1 ngày -01: 00: 00' |
- | dấu thời gian '2001-09-29 03:00' - dấu thời gian '2001-09-27 12:00' | khoảng thời gian '1 ngày 15:00:00' |
* | 900 * khoảng thời gian '1 giây' | khoảng thời gian '00: 15: 00 ' |
* | 21 * khoảng thời gian '1 ngày' | khoảng thời gian '21 ngày ' |
* | độ chính xác kép '3,5' * khoảng thời gian '1 giờ' | khoảng thời gian '03: 30: 00' |
/ | khoảng thời gian '1 giờ' / độ chính xác gấp đôi '1,5' | khoảng thời gian '00: 40: 00 ' |
Sau đây là danh sách tất cả các chức năng quan trọng liên quan đến Ngày và Giờ có sẵn.
S. Không. | Mô tả chức năng |
---|---|
1 | TUỔI TÁC() Trừ các đối số |
2 | NGÀY / GIỜ HIỆN TẠI () Ngày và giờ hiện tại |
3 | DATE_PART () Nhận trường con (tương đương với giải nén) |
4 | TRÍCH XUẤT() Nhận trường con |
5 | ISFINITE () Kiểm tra ngày, giờ và khoảng thời gian hữu hạn (không phải +/- vô cực) |
6 | JUSTIFY Điều chỉnh khoảng thời gian |
AGE (dấu thời gian, dấu thời gian), AGE (dấu thời gian)
S. Không. | Mô tả chức năng |
---|---|
1 | AGE(timestamp, timestamp) Khi được gọi với dạng TIMESTAMP của đối số thứ hai, AGE () trừ các đối số, tạo ra kết quả "tượng trưng" sử dụng năm và tháng và thuộc loại INTERVAL. |
2 | AGE(timestamp) Khi được gọi với chỉ TIMESTAMP làm đối số, AGE () sẽ trừ khỏi ngày_của_đây (vào lúc nửa đêm). |
Ví dụ về hàm AGE (timestamp, timestamp) là -
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
age
-------------------------
43 years 9 mons 27 days
Ví dụ về hàm AGE (dấu thời gian) là -
testdb=# select age(timestamp '1957-06-13');
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
age
--------------------------
55 years 10 mons 22 days
NGÀY / GIỜ HIỆN TẠI ()
PostgreSQL cung cấp một số hàm trả về giá trị liên quan đến ngày giờ hiện tại. Sau đây là một số chức năng -
S. Không. | Mô tả chức năng |
---|---|
1 | CURRENT_DATE Cung cấp ngày hiện tại. |
2 | CURRENT_TIME Cung cấp giá trị theo múi giờ. |
3 | CURRENT_TIMESTAMP Cung cấp giá trị theo múi giờ. |
4 | CURRENT_TIME(precision) Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây. |
5 | CURRENT_TIMESTAMP(precision) Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây. |
6 | LOCALTIME Cung cấp giá trị không có múi giờ. |
7 | LOCALTIMESTAMP Cung cấp giá trị không có múi giờ. |
số 8 | LOCALTIME(precision) Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây. |
9 | LOCALTIMESTAMP(precision) Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây. |
Ví dụ sử dụng các hàm từ bảng trên -
testdb=# SELECT CURRENT_TIME;
timetz
--------------------
08:01:34.656+05:30
(1 row)
testdb=# SELECT CURRENT_DATE;
date
------------
2013-05-05
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP;
now
-------------------------------
2013-05-05 08:01:45.375+05:30
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP(2);
timestamptz
------------------------------
2013-05-05 08:01:50.89+05:30
(1 row)
testdb=# SELECT LOCALTIMESTAMP;
timestamp
------------------------
2013-05-05 08:01:55.75
(1 row)
PostgreSQL cũng cung cấp các hàm trả về thời gian bắt đầu của câu lệnh hiện tại, cũng như thời gian hiện tại thực tế tại thời điểm hàm được gọi. Các chức năng này là -
S. Không. | Mô tả chức năng |
---|---|
1 | transaction_timestamp() Nó tương đương với CURRENT_TIMESTAMP, nhưng được đặt tên để phản ánh rõ ràng những gì nó trả về. |
2 | statement_timestamp() Nó trả về thời gian bắt đầu của câu lệnh hiện tại. |
3 | clock_timestamp() Nó trả về thời gian hiện tại thực tế và do đó giá trị của nó thay đổi ngay cả trong một lệnh SQL duy nhất. |
4 | timeofday() Nó trả về thời gian hiện tại thực tế, nhưng dưới dạng một chuỗi văn bản được định dạng chứ không phải là một dấu thời gian với giá trị múi giờ. |
5 | now() Nó là một PostgreSQL truyền thống tương đương với transaction_timestamp (). |
DATE_PART (văn bản, dấu thời gian), DATE_PART (văn bản, khoảng thời gian), DATE_TRUNC (văn bản, dấu thời gian)
S. Không. | Mô tả chức năng |
---|---|
1 | DATE_PART('field', source) Các hàm này lấy các trường con. Các lĩnh vực thông số cần phải được một giá trị chuỗi, không phải là một cái tên. Các tên trường hợp lệ là: thế kỷ, ngày, thập kỷ, giảm, doy, kỷ nguyên, giờ, isodow, isoyear, micro giây, thiên niên kỷ, mili giây, phút, tháng, quý, giây, múi giờ, timezone_hour, timezone_minute, tuần, năm. |
2 | DATE_TRUNC('field', source) Hàm này về mặt khái niệm tương tự như hàm trunc cho số. nguồn là một biểu thức giá trị của loại dấu thời gian hoặc khoảng thời gian. trường chọn độ chính xác để cắt bớt giá trị đầu vào. Giá trị trả về thuộc loại dấu thời gian hoặc khoảng thời gian . Các giá trị hợp lệ cho trường là: micro giây, mili giây, giây, phút, giờ, ngày, tuần, tháng, quý, năm, thập kỷ, thế kỷ, thiên niên kỷ |
Sau đây là các ví dụ cho các hàm DATE_PART ( 'trường' , nguồn) -
testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
Sau đây là các ví dụ cho các hàm DATE_TRUNC ( 'trường' , nguồn) -
testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-02-16 20:00:00
(1 row)
testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-01-01 00:00:00
(1 row)
EXTRACT (trường từ dấu thời gian), EXTRACT (trường từ khoảng thời gian)
Các EXTRACT(field FROM source)hàm lấy ra các trường con như năm hoặc giờ từ các giá trị ngày / giờ. Các nguồn phải là một biểu hiện giá trị của loại dấu thời gian, thời gian, hoặc khoảng thời gian . Các lĩnh vực là một định danh hoặc chuỗi mà chọn những gì trường để chiết xuất từ giá trị nguồn. Hàm EXTRACT trả về giá trị của kiểu chính xác kép .
Sau đây là các tên trường hợp lệ (tương tự như tên trường hàm DATE_PART): thế kỷ, ngày, thập kỷ, giảm, doy, kỷ nguyên, giờ, isodow, isoyear, micro giây, thiên niên kỷ, mili giây, phút, tháng, quý, giây, múi giờ, timezone_hour , timezone_minute, tuần, năm.
Sau đây là các ví dụ về hàm EXTRACT ( 'trường' , nguồn) -
testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
ISFINITE (ngày), ISFINITE (dấu thời gian), ISFINITE (khoảng thời gian)
S. Không. | Mô tả chức năng |
---|---|
1 | ISFINITE(date) Kiểm tra cho ngày hữu hạn. |
2 | ISFINITE(timestamp) Kiểm tra tem thời gian hữu hạn. |
3 | ISFINITE(interval) Kiểm tra cho khoảng thời gian hữu hạn. |
Sau đây là các ví dụ về hàm ISFINITE () -
testdb=# SELECT isfinite(date '2001-02-16');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(interval '4 hours');
isfinite
----------
t
(1 row)
JUSTIFY_DAYS (khoảng thời gian), JUSTIFY_HOURS (khoảng thời gian), JUSTIFY_INTERVAL (khoảng thời gian)
S. Không. | Mô tả chức năng |
---|---|
1 | JUSTIFY_DAYS(interval) Điều chỉnh khoảng thời gian để khoảng thời gian 30 ngày được biểu thị dưới dạng tháng. Trả lạiinterval kiểu |
2 | JUSTIFY_HOURS(interval) Điều chỉnh khoảng thời gian để khoảng thời gian 24 giờ được biểu thị dưới dạng ngày. Trả lạiinterval kiểu |
3 | JUSTIFY_INTERVAL(interval) Điều chỉnh khoảng thời gian bằng cách sử dụng JUSTIFY_DAYS và JUSTIFY_HOURS, với các điều chỉnh dấu hiệu bổ sung. Trả lạiinterval kiểu |
Sau đây là các ví dụ cho các hàm ISFINITE () -
testdb=# SELECT justify_days(interval '35 days');
justify_days
--------------
1 mon 5 days
(1 row)
testdb=# SELECT justify_hours(interval '27 hours');
justify_hours
----------------
1 day 03:00:00
(1 row)
testdb=# SELECT justify_interval(interval '1 mon -1 hour');
justify_interval
------------------
29 days 23:00:00
(1 row)