sql >> Base de Datos >  >> RDS >> Mysql

generar días a partir del intervalo de fechas

Esta solución no utiliza bucles, procedimientos ni tablas temporales. . La subconsulta genera fechas de los últimos 10 000 días y puede ampliarse para retroceder o avanzar tanto como desee.

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' 

Salida:

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

Notas sobre el rendimiento

Probándolo aquí , el rendimiento es sorprendentemente bueno:la consulta anterior tarda 0,0009 segundos.

Si extendemos la subconsulta para generar aprox. 100.000 números (y, por lo tanto, alrededor de 274 años de fechas), se ejecuta en 0,0458 segundos.

Por cierto, esta es una técnica muy portátil que funciona con la mayoría de las bases de datos con ajustes menores.

Ejemplo de SQL Fiddle que devuelve 1000 días