2011-08-25 19 views
5

Ho bisogno di una query in SQL.
Se ho due colonne STARTDATE e END_DATE.
Desidero selezionare tutte le righe in cui una data rientra tra queste due date.Seleziona data tra due colonne

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

+0

Vuoi dire che hai bisogno di una riga per ciascuna delle singole date tra inizio e fine nel set di risultati? – Yuck

+0

possibile duplicato di [Ottenere un elenco di date tra due date] (http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates) – Jacob

+0

Se questo è MySQL. Se no, scusa per il rapido dupe vote vote :) – Jacob

risposta

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

sostituire la data esplicita sia con now() o di un parametro o qualsiasi altra cosa.

Se l'enddate è non definito come NOT NULL si può fare:

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

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

+1

+1 - Ma cambierei enddate a 'COALESCE (enddate, now())' – Lamak

+0

Se 'enddate' è definito come NOT NULL, buon suggerimento. – Johan

0

Questo ti aiuta?

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

A seconda del database, utilizzare CURRENT_TIMESTAMP() o TODAY()

0

Vuoi dire questo:

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

Fino a fare di più per chiarire la tua domanda, è difficile per noi fornire risposte migliori.

Problemi correlati