在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中文網其他相關文章!