SQL中如何获取ISO标准的年-周(YYYY-WW)格式结果
问题根因
你得到异常值的核心原因是隐式类型转换导致+被识别为算术加法运算符,而非字符串拼接符:YEAR()和DATEPART()返回的都是整数类型,SQL执行时会尝试把中间的'-'也转换为整数参与运算,最终得到「年份+周数」的算术结果,2020+53刚好就是你遇到的2073错误值。
正确修改方案
适配SQL Server 2012及更高版本
使用CONCAT函数自动处理类型转换,同时补充周数补零逻辑,输出标准的YYYY-WW格式:
CONCAT( YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date])), '-', RIGHT('0' + CAST(DATEPART(ISOWK, [Date]) AS VARCHAR(2)), 2) )
适配SQL Server 2012以下版本
手动将数值类型转为字符串后再拼接:
CAST(YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date])) AS VARCHAR(4)) + '-' + RIGHT('0' + CAST(DATEPART(ISOWK, [Date]) AS VARCHAR(2)), 2)
补充说明
上面的写法额外增加了周数补零逻辑,会将19周自动格式化为`01`09,避免出现2021-1这类不符合格式要求的结果。
内容的提问来源于stack exchange,提问作者PVeld
相关产品推荐
相关产品推荐

