You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:24:03