Di PostgreSQL, date_trunc()
fungsi memotong nilai tanggal/waktu ke presisi yang ditentukan.
Itu juga dapat memotong nilai ke presisi tertentu dalam zona waktu tertentu.
Anda dapat menganggapnya sebagai versi tanggal dari trunc()
fungsi (yang memotong angka).
Sintaks
Sintaksnya seperti ini:
date_trunc(field, source [, time_zone ])
Dimana:
field
adalah presisi untuk memotong nilai input (misalnyamonth
,hour
, dll). Lihat di bawah untuk daftar lengkap nilai yang dapat diterima untuk argumen ini.source
adalah ekspresi nilai dari tipe stempel waktu , stempel waktu dengan zona waktu , atau interval . Perhatikan bahwa nilai tipe tanggal dan waktu dilemparkan secara otomatis ke stempel waktu atau interval , masing-masing.time_zone
opsional argumen dapat diberikan untuk menentukan zona waktu yang berbeda.
field
argumen dapat berupa salah satu dari berikut ini:
- mikrodetik
- milidetik
- kedua
- menit
- jam
- hari
- minggu
- bulan
- seperempat
- tahun
- dekade
- abad
- milenium
Contoh Dasar
Berikut ini contoh untuk didemonstrasikan.
SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');
Hasil:
2020-06-30 17:00:00
Kita dapat melihat bahwa bagian waktu dari tanggal telah dipotong dari 17:29:31
ke 17:00:00
. Itu karena saya menggunakan hour
untuk argumen pertama.
Ini dia dengan nilai yang berbeda untuk argumen pertama.
\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');
Hasil (menggunakan keluaran vertikal):
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
Dalam hal ini saya menggunakan \x
untuk mengaktifkan tampilan yang diperluas/output vertikal, sehingga lebih mudah untuk membaca hasilnya.
Dengan Zona Waktu
Berikut adalah contoh untuk mendemonstrasikan WITH TIME ZONE
pilihan.
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');
Hasil:
date_trunc | 2020-07-01 03:00:00+10 date_trunc | 2020-07-01 02:00:00+10
Zona waktu lokal ketika saya menjalankan contoh-contoh ini adalah Australia/Brisbane.
Anda juga dapat menambahkan nama zona waktu lengkap sebagai argumen ketiga.
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');
Hasil:
date_trunc | 2020-06-30 15:00:00+10 date_trunc | 2020-06-30 15:00:00+10
Dengan Interval
Berikut adalah contoh yang menggunakan nilai interval alih-alih tanggal.
SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');
Hasil:
7 days, 5:00:00