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

SQL Server中获取当前及前7周周ID的格式修正问题

解决SQL Server中周ID补零的问题

你的问题核心是周数小于10时无法自动补零,导致生成的周ID格式不一致。这里有两种简单的解决方案,既能满足补零需求,又能保证周数大于10时格式正常:

方法一:使用RIGHT函数补零(兼容所有SQL Server版本)

这种方法兼容性拉满,不管你的SQL Server是哪个版本都能用。通过在周数前拼接一个0,再取右侧两位,就能自动实现补零效果。

修改后的完整SQL语句如下:

DECLARE @CurrentWeek nvarchar(6),@CurrentWeek7 nvarchar(6)
-- 生成当前周ID:年份+两位周数
SET @CurrentWeek = CAST(datepart(yy, GETDATE()) AS CHAR(4)) + RIGHT('0' + CAST(datepart(ww, GETDATE()) AS VARCHAR(2)), 2)
-- 生成往前推7周的周ID
SET @CurrentWeek7 = CAST(datepart(yy, DATEADD(WEEK, -7, GETDATE())) AS CHAR(4)) + RIGHT('0' + CAST(datepart(ww, DATEADD(WEEK, -7, GETDATE())) AS VARCHAR(2)), 2)

原理很直观:如果周数是9,拼接0后变成09,取右侧两位就是09;如果周数是11,拼接后是011,取右侧两位还是11,完美匹配你的格式要求。

方法二:使用FORMAT函数(SQL Server 2012及以上版本支持)

如果你用的是SQL Server 2012或更高版本,FORMAT函数能让代码更简洁,直接指定格式为两位数字即可:

DECLARE @CurrentWeek nvarchar(6),@CurrentWeek7 nvarchar(6)
SET @CurrentWeek = CAST(datepart(yy, GETDATE()) AS CHAR(4)) + FORMAT(datepart(ww, GETDATE()), '00')
SET @CurrentWeek7 = CAST(datepart(yy, DATEADD(WEEK, -7, GETDATE())) AS CHAR(4)) + FORMAT(datepart(ww, DATEADD(WEEK, -7, GETDATE())), '00')

FORMAT(datepart(ww, ...), '00')会自动将周数格式化为两位,不足两位时补零,代码可读性更高。

你可以根据自己的SQL Server版本选合适的方法,测试后就能看到:周数小于10时生成201909,大于10时生成201911,完全符合预期。

内容的提问来源于stack exchange,提问作者user2171512

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:02:37