Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle Seleziona dove data tra oggi

Assumendo date_enter è una DATE campo:

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

Il trunc() la funzione elimina la parte temporale per impostazione predefinita, quindi trunc(sysdate) ti dà mezzanotte questa mattina.

Se in particolare vuoi restare con between e hai una DATE non un TIMESTAMP , potresti fare:

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

between è compreso, quindi se non ti prendi un secondo di pausa, potresti potenzialmente raccogliere i record da mezzanotte esatta di stasera; quindi questo genera l'ora 23:59:59 che stavi cercando nella tua query originale. Ma usando >= e < è un po' più chiaro ed esplicito, secondo me comunque.

Se sei sicuro di non poter comunque avere date successive a oggi, il limite superiore non aggiunge nulla e otterresti lo stesso risultato con solo:

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

Non vuoi usare trunc o to_char su date_enter colonna però; l'utilizzo di qualsiasi funzione impedisce l'utilizzo di un indice su quella colonna, motivo per cui la tua query con to_char era troppo lento.