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

Perbandingan tanggal dan waktu sql dari tabel ganda

Oke, saya pikir saya punya Anda. Anda ingin melakukan hal berikut?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

Cukup tidak biasa untuk peduli dengan milidetik tetapi jika Anda melakukannya maka Anda harus menggunakan systimestamp .

Dilihat dari fakta bahwa Anda telah membagi tanggal dan waktu, ini adalah karakter, Jadi, saya harus menebak format topeng . Jika mereka salah, tautan akan memandu Anda tentang apa yang harus dilakukan. Omong-omong, tidak bijaksana membagi kencan dengan cara ini. Anda dapat membuat kolom menggunakan timestamp tipe data di tabel Anda, yang akan membuat masalah Anda menjadi sangat sederhana.

Jadi, saya tidak tahu mengapa Anda memilih 'Day' format untuk kueri Anda tetapi menggunakan <some date> . itu menjadi to_char(sysdate, 'DAY') .

Dari komentar Anda di bawah <some date> akan menjadi to_char(sysdate, 'DD-MON-YY')

<some time> akan menjadi to_char(systimestamp,'HH24:MI:SS:FF3') , yang akan memberi Anda stempel waktu ke milidetik, meskipun tipe datanya bisa sampai ke mikrodetik.

Tampaknya agak aneh bagi saya tetapi pertanyaan Anda kemudian menjadi:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

Akan lebih normal, jika menyimpan tanggal sebagai string, untuk menyimpannya dalam format yyyymmdd jadi setidaknya Anda bisa menjamin itu teratur. Jika Anda sudah melakukan hal seperti ini maka ubah saja format mask. Jika belum, maka kueri ini tidak akan berfungsi sebagaimana mestinya.

Secara pribadi, jika Anda memiliki untuk menyimpan data dengan cara ini dan dengan asumsi state_date disimpan sebagai, katakanlah, dd-mon-yy , yaitu termasuk tahun, bulan DAN hari, dan state_time disimpan seperti yang ditunjukkan di atas, maka saya akan melakukan sesuatu seperti ini:

select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

Itu membuat lebih jelas apa yang sedang terjadi dan tidak ada ambiguitas tentang apa < berarti dalam situasi ini sebagai tanggal akan selalu kurang dari tanggal yang akan datang, yang tidak selalu berlaku untuk string.

Saya harap ini masuk akal.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ke Excel - prosedur ekspor PL/SQL

  2. Bagaimana menerapkan hubungan satu-ke-satu, satu-ke-banyak dan banyak-ke-banyak saat mendesain tabel?

  3. Contoh Kumpulkan Massal Oracle Menggunakan Objek Tipe Baris Kursor

  4. xml ke tabel DB Oracle:menghadapi masalah

  5. Membuat pemicu untuk hanya berjalan ketika tabel baru sedang dibuat