如何将日期键转换为yyyy-ww格式?(基于1900-01-01天数)
将日期天数转换为yyyy-ww格式的解决方案
你碰到的WEEK是无效函数问题,核心是不同SQL数据库的周处理函数语法不一样,下面针对主流数据库给出适配方案,同时提供一步转换的写法(不用先生成DateAdd列):
MySQL/MariaDB
分步实现
先把天数转成标准日期,再拼接年份和补零后的周数(WEEK()函数的第二个参数1表示周一为一周起始,第一周至少包含4天,符合ISO周规则):
SELECT * , DATE_ADD('1900-01-01', INTERVAL order_date_key DAY) AS DateAdd , CONCAT(YEAR(DATE_ADD('1900-01-01', INTERVAL order_date_key DAY)), '-', LPAD(WEEK(DATE_ADD('1900-01-01', INTERVAL order_date_key DAY), 1), 2, '0')) AS YearWeek FROM your_table;
一步转换(省去DateAdd列)
直接计算目标格式,避免重复调用日期转换函数:
SELECT * , CONCAT(YEAR(DATE_ADD('1900-01-01', INTERVAL order_date_key DAY)), '-', LPAD(WEEK(DATE_ADD('1900-01-01', INTERVAL order_date_key DAY), 1), 2, '0')) AS YearWeek FROM your_table;
PostgreSQL
PostgreSQL用EXTRACT函数提取年份和周数,同样可以指定周规则:
分步实现
SELECT * , ('1900-01-01'::DATE + order_date_key) AS DateAdd , CONCAT(EXTRACT(YEAR FROM ('1900-01-01'::DATE + order_date_key)), '-', LPAD(EXTRACT(WEEK FROM ('1900-01-01'::DATE + order_date_key))::TEXT, 2, '0')) AS YearWeek FROM your_table;
一步转换
SELECT * , CONCAT(EXTRACT(YEAR FROM ('1900-01-01'::DATE + order_date_key)), '-', LPAD(EXTRACT(WEEK FROM ('1900-01-01'::DATE + order_date_key))::TEXT, 2, '0')) AS YearWeek FROM your_table;
如果需要严格的ISO周数,把EXTRACT(WEEK FROM ...)换成EXTRACT(ISO_WEEK FROM ...)即可。
SQL Server
SQL Server用DATEADD转日期,DATEPART取周数:
分步实现
SELECT * , DATEADD(DAY, order_date_key, '1900-01-01') AS DateAdd , CONCAT(YEAR(DATEADD(DAY, order_date_key, '1900-01-01')), '-', RIGHT('0' + CAST(DATEPART(WEEK, DATEADD(DAY, order_date_key, '1900-01-01')) AS VARCHAR(2)), 2)) AS YearWeek FROM your_table;
一步转换
SELECT * , CONCAT(YEAR(DATEADD(DAY, order_date_key, '1900-01-01')), '-', RIGHT('0' + CAST(DATEPART(WEEK, DATEADD(DAY, order_date_key, '1900-01-01')) AS VARCHAR(2)), 2)) AS YearWeek FROM your_table;
注意事项
- 周数规则:不同数据库的周起始日(周一/周日)、第一周的判定逻辑可能有差异,要根据业务需求调整参数。比如MySQL的
WEEK(date, 2)表示周一为起始,第一周是包含1月1日的周。 - 补零处理:用
LPAD或RIGHT('0' + ...)确保周数是两位,比如第5周显示为05,符合yyyy-ww的格式要求。
用你的示例数据(42734、42711、42720、42760)测试,上述语句会生成你期望的2022-05、2022-03、2022-03、2022-01结果。
内容的提问来源于stack exchange,提问作者m_smith1277
相关产品推荐
相关产品推荐

