sql >> Base de Datos >  >> RDS >> Sqlserver

Genere un conjunto de resultados de fechas incrementales en TSQL

Si sus fechas no tienen más de 2047 días de diferencia:

declare @dt datetime, @dtEnd datetime
set @dt = getdate()
set @dtEnd = dateadd(day, 100, @dt)

select dateadd(day, number, @dt)
from 
    (select number from master.dbo.spt_values
     where [type] = 'P'
    ) n
where dateadd(day, number, @dt) < @dtEnd

Actualicé mi respuesta después de varias solicitudes para hacerlo. ¿Por qué?

La respuesta original contenía la subconsulta

 select distinct number from master.dbo.spt_values
     where name is null

que ofrece el mismo resultado, ya que los probé en SQL Server 2008, 2012 y 2016.

Sin embargo, cuando traté de analizar el código que MSSQL internamente al consultar desde spt_values , encontré que SELECT las sentencias siempre contienen la cláusula WHERE [type]='[magic code]' .

Por lo tanto, decidí que, aunque la consulta arroja el resultado correcto, entrega el resultado correcto por razones incorrectas:

Puede haber una versión futura de SQL Server que defina un [type] diferente valor que también tiene NULL como valores para [name] , fuera del rango de 0-2047, o incluso no contiguos, en cuyo caso el resultado sería simplemente incorrecto.