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

Oracle TO_NUMBER函数格式模型报错ORA-01481问题咨询

ORA-01481错误原因及解决方法

你的SQL语句SELECT TO_NUMBER('$123,456.789','$999,999G999D999') FROM DUAL;触发ORA-01481错误,核心原因是数字格式模型里混合了分组分隔符的两种表示(逗号,和G)、以及小数点的两种表示(点.和D),这是Oracle明确禁止的用法。

规则说明

Oracle的数字格式模型中:

  • G是会话参数NLS_NUMERIC_CHARACTERS定义的分组分隔符,D是该参数定义的小数点分隔符(默认美式格式下,NLS_NUMERIC_CHARACTERS值为,.,此时G等价于,,D等价于.)
  • 直接写,和.属于硬编码的固定分隔符

这两类符号不能在同一个格式模型里混用,否则数据库无法确定要遵循哪一套分隔规则,直接触发格式模型无效错误。

修正后的SQL示例

方式1:统一使用硬编码分隔符

SELECT TO_NUMBER('$123,456.789','$999,999.999') FROM DUAL;

方式2:统一使用G和D(需确保会话NLS_NUMERIC_CHARACTERS为,.)

SELECT TO_NUMBER('$123,456.789','$999G999D999') FROM DUAL;

官方规则确认

Oracle官方文档明确规定:在同一个数字格式模型中,不能同时使用G与逗号,,也不能同时使用D与点.。因为G/D是依赖本地化参数的动态符号,而,/.是固定符号,混用会导致格式解析歧义。

内容的提问来源于stack exchange,提问作者Бам Бам

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:50:29