创建一年的时间序列
本练习的目标是生成一整年的按天序列。为此,您需要使用以下两个时间/日期函数:
GETDATE()DATEADD(datepart, number, date)
使用 GETDATE() 可获取当前时间(例如:2019-03-14 20:09:14),而使用 DATEADD(month, 1, GETDATE()) 可得到当前时间加 1 个月(例如:2019-04-14 20:09:14)。
要得到一年的按天序列,您需要进行 365 次递归。
因此,请通过 OPTION (MAXRECURSION n) 来增加迭代次数,其中 n 表示迭代次数。
本练习是课程的一部分
SQL Server 中的分层与递归查询
练习说明
- 将当前时间初始化为
time。 - 以递归方式选择 CTE,并使用正确的语句将锚点成员与递归成员合并。
- 将迭代次数限制为一年中的天数减 1。
- 使用
OPTION (MAXRECURSION n)将最大迭代次数提高到一年中的天数。
交互式实操练习
通过完成这段示例代码来试试这个练习。
WITH time_series AS (
SELECT
-- Get the current time
___ AS time
UNION ALL
SELECT
DATEADD(day, 1, time)
-- Call the CTE recursively
FROM ___
-- Limit the time series to 1 year minus 1 (365 days -1)
WHERE time < GETDATE() + ___)
SELECT time
FROM time_series
-- Increase the number of iterations (365 days)
OPTION(MAXRECURSION ___)