'10-MAY-20'
bukan tanggal, itu adalah string. Tanggal tidak memiliki format apa pun, berdasarkan setelan NLS khusus lokal Anda, tanggal ditampilkan dalam format yang dapat dibaca manusia menggunakan TO_CHAR
dan topeng format yang tepat.
Juga, Anda harus menghindari penggunaan dua digit YY
representasi untuk tahun, itulah alasannya Y2K bug dimulai. Selalu gunakan YYYY
format.
Untuk mengubah string menjadi tanggal:
Gunakan TO_DATE
dan topeng format yang sesuai:
where date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')
and date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')
Atau, gunakan ANSI date literal
yang menggunakan format tetap 'YYYY-MM-DD'
:
where date_col > DATE '2020-05-10' and date < DATE '2020-05-13'
Hal lain, DATE
adalah kata khusus Oracle, Anda dapat melihat dokumentasi . Mungkin, Anda menggunakan pengidentifikasi yang dikutip "date"
yaitu menggunakan tanda kutip ganda di sekitar kata yang dicadangkan.
Itu mungkin karena pengaturan NLS Anda dari Pengembang SQL diatur ke 'DD-MON-YY'
, jadi ketika Anda melewatkan tanggal dalam format itu, ia melakukan konversi implisit ke tanggal. Namun, jika Anda mengubah formatnya, itu tidak akan berfungsi:
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';