Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SQL- Perbedaan antara TIMESTAMP, TANGGAL DAN TIMESTAMP DENGAN ZONA WAKTU?

Jenis data dan perbedaan di antaranya adalah dalam dokumentasi . Versi singkatnya adalah:

  • DATE memiliki presisi hingga satu detik tanpa dukungan zona waktu;
  • TIMESTAMP memiliki presisi hingga sepersekian detik (hingga sembilan desimal, tetapi sistem operasi Anda juga memengaruhinya), masih tanpa dukungan zona waktu;
  • TIMESTAMP WITH TIME ZONE memiliki presisi yang sama dengan TIMESTAMP tetapi juga memiliki dukungan zona waktu, seperti namanya;
  • TIMESTAMP WITH LOCAL TIME ZONE menyesuaikan nilai yang disimpan ke dan dari zona waktu lokal sesi pembuatan/kueri.

Anda mungkin menemukan artikel ini menarik juga.

Setiap kali Anda membandingkan nilai datetime yang disimpan dalam database Anda, Anda harus menggunakan nilai dari tipe data yang sama untuk dibandingkan. Anda tidak ingin harus mengonversi setiap nilai di kolom untuk perbandingan, terutama jika kolom diindeks. Jika Anda memiliki kolom DATE, bandingkan dengan DATE - jangan bandingkan sebagai string, dan jangan mengandalkan konversi dari sebuah string. Ketika Anda melakukannya:

WHERE date_col BETWEEN '01-JAN-1990' AND '01-JAN-2000'

Anda mengandalkan NLS_DATE_FORMAT Anda sebagai DD-MON-YYYY dan NLS_DATE_LANGUAGE Anda adalah bahasa Inggris. Jika orang lain menjalankan kueri yang sama di sesi lain, pengaturannya dapat menyebabkan kueri gagal (atau dalam beberapa kasus, memberikan hasil yang salah, yang bisa lebih buruk). Untuk menghindari masalah bahasa, lebih baik menggunakan nomor bulan daripada nama. Jika Anda memiliki variabel string untuk dibandingkan, Anda harus menggunakan TO_DATE() untuk mengonversi string menjadi DATE menggunakan topeng format tetap yang diketahui - jangan mengandalkan NLS. Jika Anda memiliki nilai tetap, Anda dapat melakukan hal yang sama, atau Anda dapat menggunakan literal tanggal , yang lebih pendek dan tidak ambigu.

Dengan format yang Anda gunakan, Anda juga menyertakan setiap baris yang kolomnya disetel ke tengah malam pada tanggal 1 Januari 2000, tetapi tidak lebih lambat dari hari itu. Itu mungkin yang Anda inginkan, tetapi pastikan Anda memahami bagaimana BETWEEN bekerja. Jika Anda benar-benar mencari tanggal dalam dekade tersebut, termasuk kapan saja pada tanggal 31 Desember 1999, Anda dapat menggunakan:

WHERE date_col >= DATE '1990-01-01' AND date_col < DATE '2000-01-01'

Untuk stempel waktu, Anda dapat menggunakan TO_TIMESTAMP() atau stempel waktu literal:

WHERE ts_col >= TIMESTAMP '1990-01-01 00:00:00'
AND ts_col < TIMESTAMP '2000-01-01 00:00:00'

Untuk stempel waktu dengan zona waktu, Anda dapat menggunakan TO_TIMESTAMP_TZ() atau literal stempel waktu, dengan nama wilayah zona waktu:

WHERE tstz_col >= TIMESTAMP '1990-01-01 00:00:00 America/New_York'
AND tstz_col < TIMESTAMP '2000-01-01 00:00:00 America/New_York'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan tanggal BC ke Oracle?

  2. Oracle SqlPlus - menyimpan output dalam file tetapi tidak ditampilkan di layar

  3. Apakah Mungkin untuk Menjelaskan tabel dan menampilkan kolom NOTNULL terlebih dahulu?

  4. SQL IN Klausul 1000 batas item

  5. Oracle sql bergabung untuk menyisipkan dan menghapus tetapi tidak memperbarui