PostgreSQL - Fungsi dan Operator TANGGAL / WAKTU
Kita telah membahas tentang tipe data Tanggal / Waktu di bab Tipe Data . Sekarang, mari kita lihat operator Tanggal / Waktu dan Fungsi.
Tabel berikut mencantumkan perilaku operator aritmatika dasar -
Operator | Contoh | Hasil |
---|---|---|
+ | tanggal '2001-09-28' + integer '7' | tanggal '2001-10-05' |
+ | tanggal '2001-09-28' + interval '1 jam' | cap waktu '2001-09-28 01:00:00' |
+ | tanggal '2001-09-28' + waktu '03: 00 ' | cap waktu '2001-09-28 03:00:00' |
+ | interval '1 hari' + interval '1 jam' | interval '1 hari 01:00:00' |
+ | timestamp '2001-09-28 01:00' + interval '23 jam ' | cap waktu '2001-09-29 00:00:00' |
+ | waktu '01: 00 '+ interval' 3 jam ' | waktu '04: 00: 00 ' |
- | - interval '23 jam ' | interval '-23: 00: 00' |
- | tanggal '2001-10-01' - tanggal '2001-09-28' | integer '3' (hari) |
- | tanggal '2001-10-01' - integer '7' | tanggal '2001-09-24' |
- | tanggal '2001-09-28' - interval '1 jam' | cap waktu '2001-09-27 23:00:00' |
- | waktu '05: 00 '- waktu '03: 00' | interval '02: 00: 00 ' |
- | waktu '05: 00 '- interval' 2 jam ' | waktu '03: 00: 00 ' |
- | cap waktu '2001-09-28 23:00' - interval '23 jam ' | cap waktu '2001-09-28 00:00:00' |
- | interval '1 hari' - interval '1 jam' | interval '1 hari -01: 00: 00' |
- | timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' | interval '1 hari 15.00.00' |
* | 900 * interval '1 detik' | interval '00: 15: 00 ' |
* | 21 * interval '1 hari' | interval '21 hari ' |
* | presisi ganda '3,5' * interval '1 jam' | interval '03: 30: 00 ' |
/ | interval '1 jam' / presisi ganda '1,5' | interval '00: 40: 00 ' |
Berikut ini adalah daftar semua fungsi penting terkait Tanggal dan Waktu yang tersedia.
No. S. | Deskripsi fungsi |
---|---|
1 | USIA() Kurangi argumen |
2 | TANGGAL / WAKTU SAAT INI () Tanggal dan waktu saat ini |
3 | DATE_PART () Dapatkan subbidang (setara dengan ekstrak) |
4 | EKSTRAK() Dapatkan subbidang |
5 | ISFINITE () Tes untuk tanggal, waktu dan interval terbatas (bukan +/- tak terhingga) |
6 | MEMBENARKAN Sesuaikan interval |
AGE (cap waktu, cap waktu), AGE (cap waktu)
No. S. | Deskripsi fungsi |
---|---|
1 | AGE(timestamp, timestamp) Saat dipanggil dengan bentuk TIMESTAMP dari argumen kedua, AGE () mengurangi argumen, menghasilkan hasil "simbolis" yang menggunakan tahun dan bulan dan berjenis INTERVAL. |
2 | AGE(timestamp) Ketika dipanggil dengan hanya TIMESTAMP sebagai argumen, AGE () mengurangi dari current_date (pada tengah malam). |
Contoh fungsi AGE (timestamp, timestamp) adalah -
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
Pernyataan PostgreSQL yang diberikan di atas akan menghasilkan hasil sebagai berikut -
age
-------------------------
43 years 9 mons 27 days
Contoh fungsi AGE (timestamp) adalah -
testdb=# select age(timestamp '1957-06-13');
Pernyataan PostgreSQL yang diberikan di atas akan menghasilkan hasil sebagai berikut -
age
--------------------------
55 years 10 mons 22 days
TANGGAL / WAKTU SAAT INI ()
PostgreSQL menyediakan sejumlah fungsi yang mengembalikan nilai yang terkait dengan tanggal dan waktu saat ini. Berikut adalah beberapa fungsi -
No. S. | Deskripsi fungsi |
---|---|
1 | CURRENT_DATE Memberikan tanggal sekarang. |
2 | CURRENT_TIME Memberikan nilai dengan zona waktu. |
3 | CURRENT_TIMESTAMP Memberikan nilai dengan zona waktu. |
4 | CURRENT_TIME(precision) Secara opsional, mengambil parameter presisi, yang menyebabkan hasil dibulatkan ke banyak digit pecahan di bidang detik. |
5 | CURRENT_TIMESTAMP(precision) Secara opsional, mengambil parameter presisi, yang menyebabkan hasil dibulatkan ke banyak digit pecahan di bidang detik. |
6 | LOCALTIME Memberikan nilai tanpa zona waktu. |
7 | LOCALTIMESTAMP Memberikan nilai tanpa zona waktu. |
8 | LOCALTIME(precision) Secara opsional, mengambil parameter presisi, yang menyebabkan hasil dibulatkan ke banyak digit pecahan di bidang detik. |
9 | LOCALTIMESTAMP(precision) Secara opsional, mengambil parameter presisi, yang menyebabkan hasil dibulatkan ke banyak digit pecahan di bidang detik. |
Contoh menggunakan fungsi dari tabel di atas -
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 juga menyediakan fungsi yang mengembalikan waktu mulai dari pernyataan saat ini, serta waktu aktual saat ini pada saat fungsi tersebut dipanggil. Fungsi-fungsi ini adalah -
No. S. | Deskripsi fungsi |
---|---|
1 | transaction_timestamp() Ini setara dengan CURRENT_TIMESTAMP, tetapi dinamai untuk secara jelas mencerminkan apa yang dikembalikannya. |
2 | statement_timestamp() Ini mengembalikan waktu mulai dari pernyataan saat ini. |
3 | clock_timestamp() Ini mengembalikan waktu aktual saat ini, dan oleh karena itu nilainya berubah bahkan dalam satu perintah SQL. |
4 | timeofday() Ini mengembalikan waktu aktual saat ini, tetapi sebagai string teks yang diformat daripada stempel waktu dengan nilai zona waktu. |
5 | now() Ini adalah PostgreSQL tradisional yang setara dengan transaction_timestamp (). |
DATE_PART (teks, stempel waktu), DATE_PART (teks, interval), DATE_TRUNC (teks, stempel waktu)
No. S. | Deskripsi fungsi |
---|---|
1 | DATE_PART('field', source) Fungsi-fungsi ini mendapatkan subbidang. The lapangan parameter perlu menjadi nilai string, bukan nama. Nama bidang yang valid adalah: abad, hari, dekade, dow, doy, epoch, jam, isodow, isoyear, mikrodetik, milenium, milidetik, menit, bulan, kuartal, detik, zona waktu, zona_jam waktu, zona_minute, minggu, tahun. |
2 | DATE_TRUNC('field', source) Fungsi ini secara konseptual mirip dengan fungsi pemotongan angka. source adalah ekspresi nilai dari tipe timestamp atau interval. bidang memilih presisi mana untuk memotong nilai input. Nilai yang dikembalikan adalah tipe timestamp atau interval . Nilai yang valid untuk bidang adalah: mikrodetik, milidetik, detik, menit, jam, hari, minggu, bulan, kuartal, tahun, dekade, abad, milenium |
Berikut ini adalah contoh untuk fungsi DATE_PART ( 'field' , source) -
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)
Berikut ini adalah contoh untuk fungsi DATE_TRUNC ( 'field' , source) -
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)
EKSTRAK (bidang dari cap waktu), EKSTRAK (bidang dari interval)
Itu EXTRACT(field FROM source)fungsi mengambil subbidang seperti tahun atau jam dari nilai tanggal / waktu. The Sumber harus ekspresi nilai tipe timestamp, waktu, atau selang . The lapangan adalah identifier atau string yang menyeleksi apa lapangan untuk ekstrak dari nilai sumber. Fungsi EXTRACT mengembalikan nilai tipe presisi ganda .
Berikut ini adalah nama bidang yang valid (mirip dengan nama bidang fungsi DATE_PART): abad, hari, dekade, dow, doy, epoch, jam, isodow, isoyear, mikrodetik, milenium, milidetik, menit, bulan, kuartal, detik, zona waktu, zona waktu_jam , timezone_minute, minggu, tahun.
Berikut ini adalah contoh fungsi EXTRACT ( 'field' , source) -
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 (tanggal), ISFINITE (stempel waktu), ISFINITE (interval)
No. S. | Deskripsi fungsi |
---|---|
1 | ISFINITE(date) Tes untuk tanggal terbatas. |
2 | ISFINITE(timestamp) Tes untuk cap waktu terbatas. |
3 | ISFINITE(interval) Tes untuk interval terbatas. |
Berikut ini adalah contoh dari fungsi 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 (interval), JUSTIFY_HOURS (interval), JUSTIFY_INTERVAL (interval)
No. S. | Deskripsi fungsi |
---|---|
1 | JUSTIFY_DAYS(interval) Menyesuaikan interval sehingga jangka waktu 30 hari direpresentasikan sebagai bulan. Kembalikaninterval Tipe |
2 | JUSTIFY_HOURS(interval) Menyesuaikan interval sehingga jangka waktu 24 jam direpresentasikan sebagai hari. Kembalikaninterval Tipe |
3 | JUSTIFY_INTERVAL(interval) Sesuaikan interval menggunakan JUSTIFY_DAYS dan JUSTIFY_HOURS, dengan penyesuaian tanda tambahan. Kembalikaninterval Tipe |
Berikut ini adalah contoh untuk fungsi 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)