在指定範圍內產生日期序列
問題:
如何有效率地取得指定範圍內的所有日期,並將其儲存在遊標中?
解:
使用日期表
日期表提供了一種簡單直接的方法來檢索日期。如果可用,請使用類似以下的查詢:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date < @MaxDate;</code>
動態產生序列
如果沒有日期表,可以使用下列查詢產生日期序列:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) FROM sys.all_objects a CROSS JOIN sys.all_objects b;</code>
避免使用遊標
為了提高效能,請考慮使用基於集合的替代方案來代替遊標。例如,要檢索特定項目和日期的數量:
<code class="language-sql">DECLARE @ToDate DATE = '20140428'; SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date <= @ToDate ORDER BY Date DESC;</code>
以上是如何有效率地產生給定範圍內的日期序列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!