Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Gerar um conjunto de resultados de datas de incremento em TSQL


Se as datas não tiverem mais de 2047 dias de intervalo:
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

Atualizei minha resposta após vários pedidos para fazê-lo. Por quê?

A resposta original continha a subconsulta
 select distinct number from master.dbo.spt_values
     where name is null

que oferece o mesmo resultado, pois os testei no SQL Server 2008, 2012 e 2016.

No entanto, como tentei analisar o código que o MSSQL internamente ao consultar de spt_values , descobri que o SELECT instruções sempre contêm a cláusula WHERE [type]='[magic code]' .

Portanto, decidi que, embora a consulta retorne o resultado correto, ela entrega o resultado correto por motivos errados:

Pode haver uma versão futura do SQL Server que defina um [type] diferente valor que também tem NULL como valores para [name] , fora do intervalo de 0-2047, ou mesmo não contíguo, caso em que o resultado seria simplesmente errado.