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

Oracle SQL中如何将DD-MON-YYYY转YYYY-MM-DD并解决ORA-01861报错

报错原因

  • 你使用的格式掩码和实际日期格式不匹配:当前NLS_DATE_FORMAT配置为DD-MON-RRRR,其中MON对应英文月份缩写(如JAN/FEB),而你在TO_DATE中传入的dd-mm-rrrr/dd-mm-yyyy里的mm是数字月份,二者格式完全不匹配,因此触发ORA-01861 Literal does not match format string报错。
  • 如果你操作的是表中DATE类型的列,多调用一次TO_DATE会触发Oracle隐式类型转换:Oracle会先将DATE类型值按照NLS_DATE_FORMAT隐式转为字符串,再用你传入的格式掩码做转换,进一步放大了格式不匹配的问题。

正确实现方案

场景1:操作的是Oracle DATE类型的列(你问题描述的场景)

DATE类型本身没有固定存储格式,你只需要直接调用TO_CHAR指定输出格式即可,不需要额外转DATE:

disp_date := to_char(disp_date, 'yyyy-mm-dd');

场景2:disp_date是存储了DD-MON-YYYY格式值的字符串类型

需要指定和输入格式完全匹配的掩码,同时显式指定日期语言避免环境差异报错:

disp_date := to_char(to_date(disp_date, 'dd-mon-yyyy', 'NLS_DATE_LANGUAGE=AMERICAN'), 'yyyy-mm-dd');

可选全局会话配置

如果你希望当前会话所有DATE类型查询默认都返回YYYY-MM-DD格式,无需每次调用转换函数,可以执行会话级参数修改:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:04