本文示範了使用 T-SQL 建立包含給定範圍內的日期序列的結果集的有效技術。 我們將探索產生此日期序列的方法,並專注於優化方法。
讓我們確定開始和結束日期:
<code class="language-sql">DECLARE @StartDate datetime = 'Mar 1 2009', @EndDate datetime = 'Aug 1 2009'</code>
一個簡單但效率較低的方法利用 WHILE
循環:
<code class="language-sql">DECLARE @currentDate datetime SET @currentDate = @StartDate WHILE @currentDate <= @EndDate BEGIN SELECT @currentDate SET @currentDate = DATEADD(day, 1, @currentDate) END</code>
這種迭代方法有效,但對於大日期範圍來說可能會很慢。
spt_values
的最佳化方法(SQL Server 2005 及更高版本)為了提高效能,特別是在更廣泛的日期範圍內,請利用 spt_values
系統表(在 SQL Server 2005 及更高版本中可用):
<code class="language-sql">DECLARE @StartDate datetime, @EndDate datetime; SET @StartDate = GETDATE(); SET @EndDate = DATEADD(day, 100, @StartDate); SELECT DATEADD(day, number, @StartDate) AS DateValue FROM master..spt_values WHERE type = 'P' AND DATEADD(day, number, @StartDate) <= @EndDate;</code>
此查詢透過新增從 spt_values
到開始日期的連續數字並過濾以僅包含指定範圍內的日期,有效地產生日期系列。對於較大的資料集,此方法比基於循環的方法要快得多。 master..spt_values
表提供了易於使用的數字序列,非常適合此任務。
以上是如何在 T-SQL 中高效產生日期範圍結果集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!