首页 >数据库 >mysql教程 >如何在 SQL Server 中生成两个给定日期之间的一系列日期?

如何在 SQL Server 中生成两个给定日期之间的一系列日期?

Barbara Streisand
Barbara Streisand原创
2025-01-15 09:07:43187浏览

How to Generate a Series of Dates Between Two Given Dates in SQL Server?

在SQL Server中生成日期范围

在SQL Server中,填充表中两个给定日期之间的日期范围的任务可以使用多种方法简化。一种有效的方法是利用数字表或计数表来生成一系列整数。

根据请求填充'2011-09-01'和'2011-10-10'之间日期的表,可以实现以下解决方案:

<code class="language-sql">DECLARE @StartDate DATE = '20110901'
, @EndDate DATE = '20111010'

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)</code>

这段代码生成从1到开始日期和结束日期之间差值的整数列表。通过从每个整数中减去1并将其添加到开始日期,它会生成一个从'2011-09-01'开始到'2011-10-10'结束的日期表。

或者,可以使用基于零的计数表来简化计算:

<code class="language-sql">CREATE TABLE [dbo].[nbrs](
    [nbr] [INT] NOT NULL
) ON [PRIMARY]

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

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

SELECT  DATEADD(DAY, nbr, @StartDate)
FROM    nbrs
WHERE   nbr <= DATEDIFF(DAY, @StartDate, @EndDate)</code>

通过在数据库中永久存储数字表,您可以将其重用于将来的查询,从而无需子查询和递归,确保性能和效率。

以上是如何在 SQL Server 中生成两个给定日期之间的一系列日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn