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,提问作者Бам Бам
相关产品推荐
相关产品推荐

