sql >> Base de Datos >  >> RDS >> Oracle

Oracle seleccione dónde fecha entre hoy

Asumiendo date_enter es una DATE campo:

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

El trunc() La función elimina la porción de tiempo de forma predeterminada, por lo que trunc(sysdate) te da la medianoche de esta mañana.

Si quieres quedarte con between , y tienes una DATE no es un TIMESTAMP , podrías hacer:

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

between es inclusivo, por lo que si no se toma un segundo de descanso, entonces podría obtener registros exactamente a partir de la medianoche de esta noche; entonces esto genera la hora 23:59:59 que estaba buscando en su consulta original. Pero usando >= y < es un poco más claro y más explícito, en mi opinión de todos modos.

Si está seguro de que no puede tener fechas posteriores a hoy de todos modos, el límite superior realmente no está agregando nada, y obtendría el mismo resultado con solo:

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

No quieres usar trunc o to_char el date_enter columna sin embargo; el uso de cualquier función evita que se use un índice en esa columna, razón por la cual su consulta con to_char era demasiado lento.