如何在SQL Server中获取格式为YYYYMMWW的年、月、周数组合值?
SQL 日期拼接为 yyyymmww / yyyy-mm-ww 格式实现方案
首先修正你原有查询的错误:datepart(wk,day(getdate()))写法有误,DATEPART计算周数的第二个参数需要传入完整日期值,仅传入DAY(getdate())会得到当月的日数字,计算出的周数不符合预期,需改为DATEPART(wk, GETDATE())。
1. 拼接为 yyyymmww 无分隔符格式
该写法兼容所有SQL Server版本,会自动为不足两位的月份、周数补前导0:
SELECT CONCAT( YEAR(GETDATE()), RIGHT(CONCAT('0', MONTH(GETDATE())), 2), RIGHT(CONCAT('0', DATEPART(WK, GETDATE())), 2) ) AS yyyymmww
2. 拼接为 yyyy-mm-ww 带横杠分隔符格式
同理兼容全版本,自动补前导0:
SELECT CONCAT( YEAR(GETDATE()), '-', RIGHT(CONCAT('0', MONTH(GETDATE())), 2), '-', RIGHT(CONCAT('0', DATEPART(WK, GETDATE())), 2) ) AS yyyy_mm_ww
若你使用SQL Server 2012及以上版本,可直接用
FORMAT函数简化实现,无需手动处理补0逻辑:
- 无分隔符版本:
SELECT FORMAT(GETDATE(), 'yyyyMMww') AS yyyymmww- 带分隔符版本:
SELECT FORMAT(GETDATE(), 'yyyy-MM-ww') AS yyyy_mm_ww
内容的提问来源于stack exchange,提问作者n00b data engineer
相关产品推荐
相关产品推荐

