2011-08-25 22 views
5

Necesito una consulta en SQL.
Si tengo dos columnas STARTDATE y END_DATE.
Quiero seleccionar todas las filas donde una fecha se encuentra entre estas dos fechas.Seleccionar fecha entre dos columnas

e.g .: startdate = 1/1/2011 AND enddate = 2/2/2011.

+0

¿Quiere decir que necesita una fila para cada una de las fechas individuales entre el inicio y el final en el conjunto de resultados? – Yuck

+0

posible duplicado de [Obtener una lista de fechas entre dos fechas] (http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates) – Jacob

+0

Si esto es MySQL. Si no, perdón por el voto de cierre rápido dupe :) – Jacob

Respuesta

10
SELECT * FROM table1 
WHERE '2011-01-01' BETWEEN table1.startdate AND table1.enddate 

Reemplazar la fecha explícita, ya sea con now() o un parámetro o lo que sea.

Si el enddate es no definido como NOT NULL que puede hacer:

SELECT * FROM table1 
WHERE '2011-01-01' BETWEEN table1.startdate AND COALESCE(table1.enddate, NOW()) 

Ver: http://www.1keydata.com/sql/sql-coalesce.html

+1

+1 - Pero cambiaría enddate a 'COALESCE (enddate, now())' – Lamak

+0

Si 'enddate' se define como NOT NULL, buena sugerencia. – Johan

0

¿Esto te puede ayudar?

select * 
from table 
where START_DATE < NOW() AND END_DATE > NOW() 

Dependiendo de la base de datos, utilice CURRENT_TIMESTAMP() o HOY()

0

¿Quieres decir esto:

select * 
from mytable 
where start_date >= '01/01/2011' 
and end_date <= '02/01/2011' 

Hasta que lo haga más para aclarar su pregunta, es difícil para nosotros proporcionar mejores respuestas.

Cuestiones relacionadas