datepart 函数不考虑更新日期

问题描述

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-062021-06-12

解决方法

好像没什么问题。由于每年都有第 24 周,因此您还可以获得 2022 年的结果。

weekdatepart 的最大值为 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