Menurut dokumentasi PostgreSQL, ada dua fungsi yang disebut to_timestamp()
:
- Satu mengonversi zaman Unix menjadi stempel waktu. Era Unix adalah jumlah detik sejak 1970-01-01 00:00:00+00.
- Yang lain mengonversi string menjadi stempel waktu.
Lebih khusus lagi, setiap fungsi mengonversi nilai menjadi stempel waktu dengan zona waktu nilai.
Meskipun dokumentasi Postgres menyajikannya sebagai dua to_timestamp()
yang terpisah fungsi, saya menyajikannya seolah-olah itu adalah satu fungsi yang menerima satu atau dua argumen.
Sintaks
Anda dapat menggunakan to_timestamp()
dengan cara berikut:
to_timestamp(double precision)
to_timestamp(text, text)
Menggunakan sintaks pertama, argumen diberikan sebagai presisi ganda nilai, dan itu adalah nilai Epoch, dalam presisi ganda yang ingin Anda ubah menjadi stempel waktu.
Menggunakan sintaks kedua, argumen pertama adalah tanggal, dan argumen kedua adalah format string.
Mengonversi Zaman Unix
Berikut adalah contoh dasar untuk mendemonstrasikan cara mengonversi Epoch ke stempel waktu.
SELECT to_timestamp(1658792421);
Hasil:
2022-07-26 09:40:21+10
Dalam kasus saya, offset zona waktu adalah +10 dan itulah yang dikembalikan.
Detik Pecahan
Berikut ini contoh dengan pecahan detik.
SELECT to_timestamp(1658792421.123456);
Hasil:
2022-07-26 09:40:21.123456+10
Memformat
Berikut adalah contoh penggunaan sintaks kedua untuk memformat nilai tanggal.
SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');
Hasil:
2022-10-21 00:00:00+10
Argumen kedua disediakan untuk menunjukkan bagaimana argumen pertama diformat.
Berikut format lain untuk lebih menggambarkan hal ini.
SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');
Hasil:
2022-10-21 00:00:00+10
Jika format argumen kedua tidak cocok dengan format argumen pertama, Anda mungkin akan mengalami kesalahan.
Misalnya:
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
Hasil:
ERROR: invalid value "ober" for "YYYY" DETAIL: Value must be an integer.
String format (argumen kedua) dapat berupa pola template apa pun dengan pengubah opsional.
Berikut daftar lengkap pola dan pengubah template yang dapat Anda gunakan dengan fungsi ini.
Tipe Pengembalian
Seperti yang disebutkan, jenis pengembaliannya adalah stempel waktu dengan zona waktu . Kami dapat memverifikasi ini dengan pg_typeof()
fungsi.
SELECT pg_typeof(to_timestamp(1658792421.123456));
Hasil:
timestamp with time zone
Mengekstrak Bagian Tanggal
Anda dapat menggunakan berbagai metode untuk mengekstrak bagian tanggal dari nilai stempel waktu.
Misalnya, Anda dapat menggunakan extract()
fungsi.
SELECT extract('month' from to_timestamp(1658792421));
Hasil:
7
Dan Anda dapat menggunakan to_char()
berfungsi jika Anda perlu melakukan sesuatu seperti, menampilkan nama bulan alih-alih nomor bulan.
SELECT to_char(to_timestamp(1658792421), 'Month');
Hasil:
July
Dan ini dia menggunakan sintaks pemformatan.
SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');
Hasil:
October
Jika Anda hanya memiliki nomor bulan, Anda dapat menggunakan contoh berikut untuk mengubah nomor bulan menjadi nama bulan.
SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');
Hasil:
March
Dan sebaliknya (mengubah nama bulan menjadi nomor bulan).
Pada contoh berikut saya mengekstrak nomor bulan dengan menggunakan date_part()
sebagai alternatif untuk extract()
.
SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));
Hasil:
3