【发布时间】:2019-01-18 05:37:52
【问题描述】:
我正在尝试以yyyyww 格式获取年份编号和星期编号,例如201901、201905、201911 等,我正在使用此查询来执行此操作:
declare @BeginDate datetime
set @beginDate = '2019-02-07'
select
concat(datepart(year, @BeginDate), right('0' + convert(varchar, datepart(week, dateadd(day, -7 , @BeginDate))), 2))
在 2018 年 12 月之前一直运行良好。但是当我尝试这个日期2019-01-07 时,它返回了201953,这是不正确的。但是对于所有其他值,例如 2019-01-14 等,它会正确获取周数。
那么如何准确获取全年的年周数组合
【问题讨论】:
-
为什么要从开始日期减去 7 天?请注意,
WEEK日期部分不一定像您想象的那样干净。给定的年份可能有 52 或 53 周,因为 52 周只有 364 天,而一年可能有 365 或 366 天。您应该定义如何计算一周。 -
请问您为什么有这个特殊要求?这是一个有效的问题,但对于像复合值这样普通的东西来说,这似乎是一个非常多的字符串/日期柔术。您可能能够以更好或更简单的方式获得所需的内容。
-
2019-01-01 属于 2018 年的第 53 周...这一切都取决于一年中第一周的定义。
标签: sql sql-server sql-date-functions