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

use*_*867 4 sql-server t-sql view date

我们正在使用商业智能系统,需要加载日期列表,以便我们可以将它们标记为“上周”或“过去 12 个月”或某些动态值。

我想知道虚拟生成一个表的最简单方法是什么,该表仅在一列中列出日期,实际上是从“2014-01-01”到当前日期的每个日期(其他列我可以使用那里的公式)。实际上,甚至将未来的日期附加一年也可能很有用。

现在,是的,我可以从另一个具有数千个条目的随机事实表中获取不同的日期,但这似乎很草率,并且正在创建一种真正不应该存在的依赖关系。

Sol*_*zky 6

使用纯 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();
Run Code Online (Sandbox Code Playgroud)

或者,我还编写了一个 SQLCLR 函数来简化此操作,该函数可在SQL#库的免费版本中使用:

SELECT [DatetimeVal]
FROM   [SQL#].[Util_GenerateDateTimeRange]('2014-01-01', GETDATE(), 1, N'day');
Run Code Online (Sandbox Code Playgroud)

如果您希望结束日期是将来的日期,只需替换GETDATE()任一查询中的 即可。