2009-08-26 11 views
5

Si tengo una tabla con una columna de fecha llamada myDate, con valores como 2009-08-25 09:00:09.0.Intervalo de fechas en PL/SQL (Oracle)

deseo seleccionar todas las filas de 25 de Ago, desde 12:00:01 AM hasta 11:59:59 PM y nada para 26 de Ago. ¿Es suficiente utilizar simplemente la condición:

where myDate between Date '2009-08-25' and Date '2009-08-26' 

Y deseo seleccionar todas las filas ANTES 25 de Ago, sin incluir Ago 25. ¿Puedo hacer:

where myDate < Date '2009-08-25' 

Respuesta

11

si desea que los datos de el día 25 y excluyendo todo el 26, tiene que quitar el primer segundo del 26:

where myDate >= Date '2009-08-25' and myDate < Date '2009-08-26' 

o

where myDate between Date '2009-08-25' and Date '2009-08-26' - interval '1' second 

actualización - Una pequeña precisión: En Oracle DATE el tipo de datos es usada tanto para este tipo de 'cita' con o sin tiempo. Si se trata de fechas sin tiempo, generalmente se almacena con un segmento de tiempo de 00:00, lo que significa medianoche. Debido a esto, el primero entre (my_date between '2009-08-25' and '2009-08-26') seleccionará potencialmente dos días completos.

Quitando el primer segundo de los 26, se asegura de que usted no inadvertidamente seleccionar filas desde el 26.

+0

¿Qué quiere decir por Comienzo de 26. Si no se incluye - 1/24/60/60 en su segunda consulta, lo que problema puede tener? – Saobi

+0

el 26 comienza a las 00:00, por lo que si desea excluir TODOS los 26, debe eliminar explícitamente ese segundo –

+0

Sí, incluye SOLAMENTE 8-26 12:00:00 AM. Ni un minuto después. Las posibilidades de que una fila ocurra exactamente a medianoche son bajas, ¿está bien? – Saobi

-2
SELECT * 
FROM TABLE 
WHERE myDate BETWEEN myDate ('08/25/2009', 'MM/DD/YYYY') 
         AND myDate ('08/26/2009', 'MM/DD/YYYY') 
+0

¿Esto es real? – cr0ss

+0

Olvidó TO_DATE antes de los corchetes –

1

Para conseguir todo entre Aug 25, a las 12:00:01 AM hasta las 11 : 59: 59 PM, ambos inclusive, intente esto:

Where myDate Between to_Date('yyyymmddhh24miss', '20090825000001') 
        And to_Date('yyyymmddhh24miss', '20090825235959') 

(¿por qué estás excluyendo la medianoche del 25 ?? Ese primer segundo (00:00:00) es parte de los 25, así ...)

Para obtener todo antes de agosto 25, intente esto:

Where myDate < to_Date('yyyymmdd', '20090825') 
Cuestiones relacionadas