gpt4 book ai didi

sql - 在 SQL 中生成递增日期的结果集

转载 作者:太空狗 更新时间:2023-10-30 01:37:48 27 4
gpt4 key购买 nike

考虑需要创建一个日期结果集。我们有开始日期和结束日期,我们想生成一个介于两者之间的日期列表。

DECLARE  @Start datetime
,@End datetime
DECLARE @AllDates table
(@Date datetime)

SELECT @Start = 'Mar 1 2009', @End = 'Aug 1 2009'

--need to fill @AllDates. Trying to avoid looping.
-- Surely if a better solution exists.

考虑当前使用 WHILE 循环的实现:

DECLARE @dCounter datetime
SELECT @dCounter = @Start
WHILE @dCounter <= @End
BEGIN
INSERT INTO @AllDates VALUES (@dCounter)
SELECT @dCounter=@dCounter+1
END

问题:如何使用 T-SQL 创建一组在用户定义范围内的日期?假设 SQL 2005+。如果您的答案是使用 SQL 2008 功能,请这样标记。

最佳答案

如果您的日期相隔不超过 2047 天:

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

我在多次请求后更新了我的答案。为什么?

原始答案包含子查询

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

它提供了相同的结果,因为我在 SQL Server 2008、2012 和 2016 上测试了它们。

但是,当我尝试分析 MSSQL 从 spt_values 查询时内部的代码时,我发现 SELECT 语句总是包含子句 WHERE [type ]='[魔术代码]'

因此我决定,虽然查询返回了正确的结果,但由于错误的原因它提供了正确的结果:

可能会有一个 future 版本的 SQL Server 定义一个不同的 [type] 值,它也有 NULL 作为 [name] 的值>,超出 0-2047 的范围,甚至不连续,在这种情况下,结果将是完全错误的。

关于sql - 在 SQL 中生成递增日期的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1478951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com