问题描述
datepart
函数与参数 week
一起应用时,也会显示更新行的结果,即使日期不在给定周的范围内:
select INSTALLATION_DATE
from {MyTABLE}
where datepart(WEEK,INSTALLATION_DATE) = 24
结果:
2022-06-05 10:11:48.0000000
2022-06-05 06:11:48.0000000
2021-06-08 10:29:41.0000000
2021-06-08 10:36:53.0000000
2021-06-08 10:37:52.0000000
2021-06-08 10:39:24.0000000
2021-06-08 10:40:03.0000000
2021-06-07 10:43:11.0000000
2021-06-09 10:43:54.0000000
前两行已更新为未来日期,但仍显示为第 24 周(2021-06-06
到 2021-06-12
)
解决方法
好像没什么问题。由于每年都有第 24 周,因此您还可以获得 2022 年的结果。
week
的 datepart
的最大值为 53,然后下一年从 1 开始:
select datepart(week,'2021-06-08') -- 24
select datepart(week,'2022-01-01') -- 1
select datepart(week,'2022-06-05') -- 24
见https://pub.dev/packages/sa_multi_tween
如果您想将其限制为一年,则必须相应地指定它,例如
select INSTALLATION_DATE
from {MyTABLE}
where datepart(week,INSTALLATION_DATE)=24
and datepart(year,INSTALLATION_DATE)=2021
,
2020 年的第 24 周从 2020 年 6 月 7 日星期一到 2020 年 6 月 13 日星期日。
2021 年的第 24 周从 2021 年 6 月 7 日星期一到 2021 年 6 月 13 日星期日。
2022 年的第 24 周从 2022 年 6 月 5 日星期一到 2022 年 6 月 11 日星期日。
您的查询
select INSTALLATION_DATE
from {MyTABLE}
where datepart(WEEK,INSTALLATION_DATE)=24
正常工作。
如果您不想获得未来的日期,您可以添加:
AND INSTALLATION_DATE <= GETDATE()
相反,如果您只想获取当前年份日期,请添加:
AND YEAR(INSTALLATION_DATE)=2020