PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana to_timestamp() Bekerja di PostgreSQL

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan PostgreSQL sangat lambat dengan batas 1

  2. Hibernasi menyimpan model Pengguna ke Postgres

  3. Bagaimana cara mengembalikan array jsonb dan array objek dari data saya?

  4. Di Redshift/Postgres, bagaimana cara menghitung baris yang memenuhi suatu kondisi?

  5. Gagal menemukan fungsi konversi dari tidak dikenal ke teks