Consulta que devuelve todos los días entre dos fechas en SQL Server

En ocasiones, puede que necesitemos obtener una lista de todas las fechas comprendidas entre dos fechas concretas. Por ejemplo, para cuando queremos rellenar una tabla de procesos que tiene un campo con el día a procesar, y queremos hacer una inserción por día para encolar el procesamiento de cada uno de los días.

En Microsoft SQL Server, no hay ninguna función que se encargue de esto. Pero lo podemos obtener mediante esta sencilla consulta.

Lo primero, será declarar la fecha de inicio y fecha de final. Lo podemos hacer con las variables @MinDate y @MaxDate, con formato YYYYMMDD. Son los únicos parámetros que necesita la query.

Básicamente, a partir de la fecha inicial, va sumando días de uno en uno. Para ello, cruza con la tabla de biblioteca sys.all_objects para asegurarse de que es una tabla lo suficientemente grande como para poder ir sumando días (1 por registro en esta tabla) para poder llegar a la fecha de fin.

Por último, mediante TOP, se queda únicamente con el número de días que necesita. O lo que es lo mismo, la diferencia en días, que hay desde la fecha de inicio a la fecha de fin.

En este ejemplo, serían 30 días, que es la diferencia entre el 31 de enero y el 1 de marzo.

DECLARE @MinDate DATE = '20220131',
                  @MaxDate DATE = '20220301';

SELECT  TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM    sys.all_objects a
     CROSS JOIN sys.all_objects b

Una vez obtenido el resultado, lo podemos cruzar como si de una tabla cuando queramos generar un registro por día, ya sea para actualizar o insertar datos en una tabla.

Deja un comentario

Pin It on Pinterest