Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle Select où la date entre aujourd'hui

En supposant date_enter est une DATE champ :

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate)
   And CuRo.Date_Enter < trunc(sysdate) + 1;

Le trunc() la fonction supprime la partie heure par défaut, donc trunc(sysdate) vous donne minuit ce matin.

Si vous voulez particulièrement vous en tenir à between , et vous avez une DATE pas un TIMESTAMP , vous pourriez faire :

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter between trunc(sysdate)
      And trunc(sysdate) + interval '1' day - interval '1' second;

between est inclusif, donc si vous ne prenez pas une seconde de repos, vous récupérerez potentiellement des enregistrements à partir de minuit exactement ce soir ; cela génère donc l'heure 23:59:59 que vous recherchiez dans votre requête d'origine. Mais en utilisant >= et < est un peu plus clair et plus explicite, à mon avis en tout cas.

Si vous êtes sûr que vous ne pouvez pas avoir de dates ultérieures à aujourd'hui de toute façon, la limite supérieure n'ajoute rien et vous obtiendrez le même résultat avec juste :

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate);

Vous ne voulez pas utiliser trunc ou to_char le date_enter colonne cependant; l'utilisation de n'importe quelle fonction empêche l'utilisation d'un index sur cette colonne, c'est pourquoi votre requête avec to_char était trop lent.