首頁 >資料庫 >mysql教程 >如何在 SQL Server 中產生兩個給定日期之間的一系列日期?

如何在 SQL Server 中產生兩個給定日期之間的一系列日期?

Barbara Streisand
Barbara Streisand原創
2025-01-15 09:07:43183瀏覽

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