Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle Select Where Date Entre Hoje


Assumindo date_enter é uma DATE campo:
Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate)
   And CuRo.Date_Enter < trunc(sysdate) + 1;

O trunc() A função remove a parte do tempo por padrão, então trunc(sysdate) dá-lhe meia-noite esta manhã.

Se você deseja ficar com between , e você tem um DATE não é um TIMESTAMP , você poderia fazer:
Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter between trunc(sysdate)
      And trunc(sysdate) + interval '1' day - interval '1' second;

between é inclusivo, portanto, se você não tirar um segundo de folga, potencialmente pegará registros exatamente da meia-noite desta noite; então isso gera a hora 23:59:59 que você estava procurando em sua consulta original. Mas usando >= e < é um pouco mais claro e explícito, na minha opinião.

Se você tem certeza de que não pode ter datas depois de hoje, o limite superior não está realmente adicionando nada e você obteria o mesmo resultado com apenas:
Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate);

Você não quer usar trunc ou to_char no date_enter coluna embora; usar qualquer função impede que um índice nessa coluna seja usado, e é por isso que sua consulta com to_char foi muito lento.