Sql-Server

如何生成日期列表 — 即過去 2 年的每一天?

  • April 18, 2019

我們正在使用商業智能係統,需要載入日期列表,以便我們可以將它們標記為“上週”或“過去 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()任一查詢中的。

嘗試這個。

https://stackoverflow.com/questions/1378593/get-a-list-of-dates-between-two-dates-using-a-function/1378788#1378788

你不需要一張不同的桌子,儘管如果你有一張桌子會有所幫助。

引用自:https://dba.stackexchange.com/questions/144700