Vous demandez les meilleures pratiques. Je pense que ce qui suit est la meilleure pratique :
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
Tout d'abord, notez l'utilisation de la DATE
mot-clé. Votre question concerne les dates et pourtant vous utilisez un format de date qu'Oracle ne prend pas directement en charge. Heureusement, Oracle prend en charge la norme ANSI DATE
mot-clé au format standard ISO.
Deuxièmement, j'ai ajouté un +1
afin que vous puissiez voir la fin de la période, ce qui est probablement ce que vous voulez voir dans le code. Cela ne devrait pas affecter les performances car le + 1
est sur une constante.
Troisièmement, une constante de date a une composante temporelle. Si aucun n'est spécifié, il est minuit le jour. Donc, l'expression :
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
Est vraiment :
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
C'est-à-dire qu'exactement une heure à partir de la date ultérieure est incluse, le premier instant à minuit. Ce n'est généralement pas ce que vous voulez. Oracle aggrave ce problème de deux manières :
- La
date
le type de données inclut une composante temporelle. - La manière par défaut de présenter
date
les valeurs n'ont pas de composante temporelle.
Donc, pour être plus sûr, utilisez les règles suivantes :
- Ne pas utiliser
between
aux dates. - Utilisez
>=
pour le premier rendez-vous. - Utilisateur
<
pour le second.
Aaron Bertrand a un blog
exactement sur ce sujet. Bien qu'il s'agisse spécifiquement de SQL Server, de nombreuses idées s'appliquent à Oracle, en particulier parce que la date
le type de données dans Oracle inclut les heures.