sql-server - 一年中几周的填充表跳过了 2021 年的第一周
问题描述
因此,我在一个过程中使用了以下代码片段,它为我填写了一个临时表,其中包含每年一周的第一天、周数和月份名称。但是,当我到达 2020 年的第 53 周时,它会跳到 2021 年的第 2 周。发生这种情况是因为 1 月的第一天在所谓的第 53 周(这是正确的),但它也应该与第一行创建另一行2021 年 1 月的一周(即使星期天在 2020 年也是如此)。
片段:
SET DATEFIRST 7
DECLARE @tblSundays TABLE (
[year] INT
,[month] INT
,[week] INT
,[date] DATETIME
)
DECLARE @DateFrom DATETIME = '2020-12-12'
,@DateTo DATETIME = '2021-06-06';
--select @DateFrom,@DateTo;
WITH CTE (dt)
AS (
SELECT @DateFrom
UNION ALL
SELECT DATEADD(d, 1, dt)
FROM CTE
WHERE dt < @DateTo
)
INSERT INTO @tblSundays
SELECT datepart(year, dt)
,datepart(month, dt)
,datepart(week, dt)
,dt
FROM CTE
WHERE datepart("dw", dt) = 1
OPTION (MAXRECURSION 1000)
;
select * from @tblSundays
有什么方法可以在此代码段中执行此操作,还是应该创建手动验证?
谢谢!
解决方案
我看不出你如何在同一个片段上拥有这两个条件,但你可以在那里添加第二个查询来完成你想要做的事情。
像这样的东西,也许:
SET datefirst 7
DECLARE @tblSundays TABLE
(
[year] INT,
[month] INT,
[week] INT,
[date] DATETIME
)
DECLARE @DateFrom DATETIME = '2020-12-12',
@DateTo DATETIME = '2021-06-06';
--select @DateFrom,@DateTo;
WITH cte (dt)
AS (SELECT @DateFrom
UNION ALL
SELECT Dateadd(d, 1, dt)
FROM cte
WHERE dt < @DateTo)
INSERT INTO @tblSundays
SELECT Datepart(year, dt),
Datepart(month, dt),
Datepart(week, dt),
dt
FROM cte
WHERE Datepart("dw", dt) = 1
OPTION (maxrecursion 1000);
--second new query
WITH cte (dt)
AS (SELECT @DateFrom
UNION ALL
SELECT Dateadd(d, 1, dt)
FROM cte
WHERE dt < @DateTo)
INSERT INTO @tblSundays
SELECT Datepart(year, dt),
Datepart(month, dt),
Datepart(week, dt),
dt
FROM cte
WHERE Datepart("dw", dt) <> 1
AND Datepart(day, dt) = 1
AND Datepart(week, dt) NOT IN (SELECT week
FROM @tblSundays)
OPTION (maxrecursion 1000);
SELECT *
FROM @tblSundays
ORDER BY year,
month,
week
这样可以吗?
推荐阅读
- java - 1 台本地主机上的 2 台 Virtual Box 机器之间的 TCP 连接
- angular - 在 Angular 9 中使用 ngx translate 转换数组
- java - 将数据添加到列表时遇到问题
- asp.net - 不执行 Ajax 函数
- unix - 在没有密码的情况下从 Python 在远程主机上运行 Unix 命令
- kotlin-coroutines - Kotlin协程协同取消解释
- bash - unix删除重复的行块,先保留
- pandas - python 2.7 中 exec 的良好替代品
- scala - 为什么不在Scala中的对象上调用类参数?
- javascript - 根据两个数组的差异排序