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

Perbandingan DATE Oracle SQL mengembalikan hasil yang salah

Anda membandingkan dua STRINGS . Anda perlu membandingkan TANGGAL s. Seperti yang sudah saya katakan di jawaban lain di sini, Anda harus membiarkan tanggal seperti untuk perhitungan DATE. TO_CHAR adalah untuk tampilan, dan TO_DATE adalah mengubah literal string menjadi DATE.

SELECT TO_CHAR(REPORTDATE, 'DD.MM.YYYY'),
  COUNT(*)
FROM TABLE
WHERE REPORTDATE > TO_DATE('09.11.2013', 'DD.MM.YYYY')
GROUP BY TO_CHAR(REPORTDATE, 'DD.MM.YYYY') 

Juga, REPORTDATE adalah kolom DATE, karena itu akan memiliki elemen datetime. Jadi, jika Anda ingin mengecualikan elemen waktu saat membandingkan, Anda perlu menggunakan TRUNC

WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')

Namun, menerapkan TRUNC pada tanggal kolom akan menekan indeks regular reguler apa pun pada kolom itu. Dari sudut pandang kinerja, sebaiknya gunakan Kondisi rentang tanggal .

Misalnya,

WHERE REPORTDATE
BETWEEN 
        TO_DATE('09.11.2013', 'DD.MM.YYYY')
AND     
        TO_DATE('09.11.2013', 'DD.MM.YYYY') +1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan ke dalam tabel dari tipe koleksi Oracle 12c - ORA-00902:tipe data tidak valid

  2. Pemicu untuk menegakkan hubungan M-M

  3. Mengapa Oracle.ManagedDataAccess tidak berfungsi ketika Oracle.DataAccess berfungsi?

  4. Bagaimana cara mengatur batas waktu koneksi di groovy sql?

  5. Cara Memformat Angka sebagai Angka Romawi di Oracle