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

Oracle中YYYY-WW格式字符转日期报错的解决咨询

Oracle中YYYY-WW格式日期转换的问题解决

错误原因

Oracle的TO_DATE函数无法仅通过YYYY-WW格式确定唯一日期——同一周数对应7天,没有默认的周内日期规则,因此会抛出format code cannot appear in date input format错误。而YYYY-MM能正常转换是因为Oracle会默认取当月第一天作为日期值。

解决方案

1. 明确周内具体日期转换

要将YYYY-WW转为日期,必须指定周内的某一天(比如周一、周日),结合D(星期几,1=周日,2=周一…7=周六)格式符使用:

-- 转换为该周的周一(注意:Oracle默认周日为一周第一天,若需调整可修改NLS_TERRITORY参数)
TO_DATE(
  TO_CHAR(TO_DATE('1970-01-01 07:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-WW') || '-2',
  'YYYY-WW-D'
)

如果需要更通用的ISO周(周一为一周起始,不受NLS设置影响),改用IW格式符:

-- 转换为ISO周的周一
TO_DATE(
  TO_CHAR(TO_DATE('1970-01-01 07:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-IW') || '-1',
  'YYYY-IW-D'
)

2. 直接用周字符串分组计算

如果你的需求只是按年度周做统计分组,不需要转成日期类型,直接用TO_CHAR生成的YYYY-WW字符串作为分组键即可,更高效:

SELECT 
  TO_CHAR(order_date, 'YYYY-WW') AS year_week,
  COUNT(*) AS total_orders
FROM your_table
GROUP BY TO_CHAR(order_date, 'YYYY-WW')
ORDER BY year_week;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:18:18