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

如何将日期键转换为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:35:19