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:
datetipe data mencakup komponen waktu.- Cara default untuk menampilkan
datenilai tidak memiliki komponen waktu.
Jadi, agar lebih aman, gunakan aturan berikut:
- Jangan gunakan
betweenberkencan. - 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.