Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle Select Where Date Between Today

Angenommen date_enter ist ein DATE Feld:

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

Der trunc() Funktion entfernt standardmäßig den Zeitteil, also trunc(sysdate) gibt dir heute morgen Mitternacht.

Wenn Sie besonders bei between bleiben möchten , und Sie haben ein DATE kein TIMESTAMP , könnten Sie Folgendes tun:

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

between ist inklusive, also wenn Sie sich keine Sekunde frei nehmen, würden Sie möglicherweise heute Nacht genau um Mitternacht Platten abholen; Dadurch wird die Zeit 23:59:59 generiert, nach der Sie in Ihrer ursprünglichen Abfrage gesucht haben. Aber mit >= und < ist ein bisschen klarer und expliziter, meiner Meinung nach jedenfalls.

Wenn Sie sicher sind, dass Sie ohnehin keine Daten später als heute haben können, fügt die Obergrenze nicht wirklich etwas hinzu, und Sie würden dasselbe Ergebnis mit nur:

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

Sie möchten trunc nicht verwenden oder to_char am date_enter Spalte aber; Die Verwendung einer beliebigen Funktion verhindert, dass ein Index für diese Spalte verwendet wird, weshalb Ihre Abfrage mit to_char war zu langsam.