首页 > 解决方案 > 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

标签: sqlsql-serverdatepart

解决方案


似乎没有什么不妥。由于每年有第 24 周,因此您还将获得 2022 年的结果。

weekof的datepart最大值为 53,然后在下一年从 1 开始:

select datepart(week, '2021-06-08') -- 24

select datepart(week, '2022-01-01') -- 1

select datepart(week, '2022-06-05') -- 24

看到这个 db<>fiddle

如果您想将其限制为一年,则必须相应地指定它,例如

select INSTALLATION_DATE 
  from {MyTABLE} 
 where datepart(week,INSTALLATION_DATE)=24  
   and datepart(year,INSTALLATION_DATE)=2021

推荐阅读