Como obter uma lista de datas entre duas datas no mysql select query

Eu quero lista de datas situa-se entre duas datas por consulta de seleção. Por exemplo:

Se eu der ‘2012-02-10’ e ‘2012-02-15’ eu preciso do resultado.

date ---------- 2012-02-10 2012-02-11 2012-02-12 2012-02-13 2012-02-14 2012-02-15 

Como posso obter?

Experimentar:

 select * from (select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0, (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1, (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2, (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3, (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v where selected_date between '2012-02-10' and '2012-02-15' 

-Para datas até quase 300 anos no futuro.

[Corrigido após uma edição sugerida por UrvishAtSynapse.]

 set @i = -1; SELECT DATE(ADDDATE('2012-02-10', INTERVAL @i:=@i+1 DAY)) AS date FROM `table` HAVING @i < DATEDIFF('2012-02-15', '2012-02-10') 

Isso retornará seu conjunto de resultados exatamente conforme prescrito. Essa consulta requer apenas que você altere as duas datas diferentes em datediff e adddate.

A resposta aceita não funcionou para mim no MySQL 5.5. Atualizei a consulta para trabalhar para mim:

 select * from (select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date from (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0, (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1, (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2, (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3, (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v where selected_date between '2012-02-10' and '2012-02-15' 

Você pode criar uma tabela contendo todas as datas que você pode precisar usar:

 date 2000-01-01 2000-01-02 2000-01-03 ...etc.. 2100-12-30 2100-12-31 

Em seguida, consulte essa tabela da seguinte maneira:

 SELECT date FROM dates WHERE date BETWEEN '2012-02-10' AND '2012-02-15' 

Dê uma olhada neste post: Obtenha uma lista de datas entre duas datas

Verifique o procedimento armazenado que Ron Savage fez, isso parece corresponder ao que você precisa!

 SELECT * FROM tablexxx WHERE datecol BETWEEN '2012-02-10' AND '2012-02-15';