gpt4 book ai didi

sql - 生成日期范围之间的日期

转载 作者:行者123 更新时间:2023-12-01 18:45:24 26 4
gpt4 key购买 nike

我需要填充一个表来存储 2 个给定日期之间的日期范围:2011 年 9 月 1 日 - 2011 年 10 月 10 日

因此,在这种情况下,表将从 09/01/11 开始并每天存储,直到 10/10/11我想知道在 SQL Server 中是否有一种巧妙的方法可以做到这一点 - 我目前正在使用 SQL Server 2008。谢谢

最佳答案

轻松使用 SQL 2005+;如果您有数字或统计表,则更容易。我在下面伪造了它:

DECLARE @StartDate DATE = '20110901'
, @EndDate DATE = '20111001'

SELECT DATEADD(DAY, nbr - 1, @StartDate)
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr
FROM sys.columns c
) nbrs
WHERE nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)

如果您有统计表,请将子查询替换为该表。没有递归。

编辑:由于人们似乎对统计表有疑问,让我使用从零开始的统计表重写它。首先,这是一些用于创建和填充表的代码。

CREATE TABLE [dbo].[nbrs](
[nbr] [INT] NOT NULL
) ON [PRIMARY]
GO


CREATE UNIQUE CLUSTERED INDEX [clidx] ON [dbo].[nbrs]
(
[nbr] ASC
)
GO

INSERT INTO dbo.nbrs (nbr)
SELECT nbr-1
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr
FROM sys.columns c
) nbrs
GO

现在,您已将数字表作为数据库中的永久对象,您可以将其重新用于查询而不是子查询。该查询也已被编辑为使用从零开始的计算。

DECLARE @StartDate DATE = '20110901'
, @EndDate DATE = '20111001'

SELECT DATEADD(DAY, nbr, @DateStart)
FROM nbrs
WHERE nbr <= DATEDIFF(DAY, @DateStart, @DateEnd)

高性能,并且无递归。

关于sql - 生成日期范围之间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824831/

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