Anda meminta praktik terbaik. Saya pikir berikut ini adalah praktik terbaik:
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
Pertama, perhatikan penggunaan DATE
kata kunci. Pertanyaan Anda adalah tentang tanggal namun Anda menggunakan format tanggal yang tidak didukung langsung oleh Oracle. Untungnya, Oracle mendukung standar ANSI DATE
kata kunci dengan format standar ISO.
Kedua, saya menambahkan +1
sehingga Anda dapat melihat akhir periode waktu, yang mungkin ingin Anda lihat dalam kode. Seharusnya tidak memengaruhi kinerja karena + 1
berada pada konstanta.
Ketiga, konstanta tanggal memiliki komponen waktu. Ketika tidak ada yang ditentukan, itu adalah tengah malam pada tanggal tersebut. Jadi, ekspresinya:
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
Benar-benar:
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
Artinya, tepat satu kali dari tanggal kemudian disertakan, saat pertama di tengah malam. Ini biasanya bukan yang Anda inginkan. Oracle memperburuk masalah ini dengan dua cara:
date
tipe data mencakup komponen waktu.- Cara default untuk menampilkan
date
nilai tidak memiliki komponen waktu.
Jadi, agar lebih aman, gunakan aturan berikut:
- Jangan gunakan
between
berkencan. - Gunakan
>=
untuk kencan pertama. - Pengguna
<
untuk yang kedua.
Aaron Bertrand memiliki blog
tepat pada topik ini. Meskipun secara khusus tentang SQL Server, banyak ide berlaku untuk Oracle -- terutama karena date
tipe data di Oracle termasuk waktu.