Sql-Server
如何生成日期列表 — 即過去 2 年的每一天?
我們正在使用商業智能係統,需要載入日期列表,以便我們可以將它們標記為“上週”或“過去 12 個月”或一些動態值。
我想知道虛擬生成一個表格的最簡單方法是什麼,該表格只是在一列中列出日期,實際上是從“2014-01-01”到目前日期的每個日期(其他列我可以使用那裡的公式)。實際上,即使將未來日期附加一年也可能很有用。
現在是的,我可以從另一個包含數千個條目的隨機事實表中獲取不同的日期,但這似乎很草率,並且正在創建一個真正不應該存在的依賴項。
使用純 T-SQL,您可以執行以下操作:
;WITH cte AS ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) - 1 AS [Incrementor] FROM [master].[sys].[columns] sc1 CROSS JOIN [master].[sys].[columns] sc2 ) SELECT DATEADD(DAY, cte.[Incrementor], '2014-01-01') FROM cte WHERE DATEADD(DAY, cte.[Incrementor], '2014-01-01') < GETDATE();
或者,我還編寫了一個 SQLCLR 函式來簡化此操作,該函式在SQL#庫的免費版本中可用:
SELECT [DatetimeVal] FROM [SQL#].[Util_GenerateDateTimeRange]('2014-01-01', GETDATE(), 1, N'day');
如果您希望結束日期在未來,只需替換
GETDATE()
任一查詢中的。
嘗試這個。
你不需要一張不同的桌子,儘管如果你有一張桌子會有所幫助。