列出日期和星期日期的脚本:
DECLARE @initDate DATE = '2014-01-01';
DECLARE @endDate DATE = '2014-12-31';
WITH dates (date, week)
AS (SELECT @initDate date,
Datepart(ww, @initDate) week
UNION ALL
SELECT Dateadd(ww, 1, t.date),
Datepart(ww, t.date)
FROM dates t
WHERE t.date < @endDate)
SELECT dates.date,
dates.week
FROM dates
前三行是:
date: week number
---------- -----------
2014-01-01 1
2014-01-08 1
2014-01-15 2
..... ..
..... ..
我猜第二排应该是2,第一排应该是3,不是吗?
是DATEPART
中的某种错误吗?即使某些事情取决于一年中的第一天,第一行日期也不同于一周内的第二行日期与任何设置。
你能澄清一下吗?
答案 0 :(得分:4)
这是因为Recursive CTE
不是因为Datepart
。
在CTE的递归部分week
仍然保持前一周而不是在递归部分生成的新date
尝试更改您的查询。
DECLARE @initDate DATE = '2014-01-01';
DECLARE @endDate DATE = '2014-12-31';
WITH dates (date, week)
AS (SELECT @initDate date,
Datepart(ww, @initDate) week
UNION ALL
SELECT Dateadd(ww, 1, t.date),
Datepart(ww, Dateadd(ww, 1, t.date))
FROM dates t
WHERE t.date < @endDate)
SELECT dates.date,
dates.week
FROM dates