Mysql
 sql >> Database >  >> RDS >> Mysql

generare giorni dall'intervallo di date

Questa soluzione non utilizza nessun ciclo, procedure o tabelle temporanee . La sottoquery genera le date degli ultimi 10.000 giorni e può essere estesa per andare indietro o avanti a piacimento.

select a.Date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
) a
where a.Date between '2010-01-20' and '2010-01-24' 

Risultato:

Date
----------
2010-01-24
2010-01-23
2010-01-22
2010-01-21
2010-01-20

Note sul rendimento

Provalo qui , le prestazioni sono sorprendentemente buone:la query precedente richiede 0,0009 sec.

Se estendiamo la sottoquery per generare ca. 100.000 numeri (e quindi circa 274 anni di date), viene eseguito in 0,0458 sec.

Per inciso, questa è una tecnica molto portabile che funziona con la maggior parte dei database con piccoli aggiustamenti.

Esempio SQL Fiddle che restituisce 1.000 giorni