首页 > 解决方案 > 为什么我的 CAST 到浮点数会在 Oracle 中给出“无效数字”错误?

问题描述

我有以下示例:

create table test_1(c1 float);
insert into test_1 values(cast('000000000000001425.6' as float));

当我想插入值时,我有

ORA-01722: 无效号码

请问我怎样才能忽略这个错误?

标签: sqloracle

解决方案


最可能的原因是您的会话nls_numeric_characters设置,.为表示逗号是小数分隔符,点是千位分隔符。

varchar2如果您真的必须接受作为输入,一种简单的解决方法是首先应用translate,将所有点转换为逗号,反之亦然。

在下图中,首先我使用一个alter session语句使我的会话表现得像你的一样。然后我会展示你现在在做什么,最后我会展示如何修复它——注意这个translate函数:

alter session set nls_numeric_characters = ',.';

Session altered.


create table test_1(c1 float);

Table TEST_1 created.


insert into test_1 values(cast('000000000000001425.6' as float));

Error starting at line : 10 in command -
insert into test_1 values(cast('000000000000001425.6' as float))
Error report -
ORA-01722: invalid number



insert into test_1 values(cast(translate('000000000000001425.6', ',.', '.,')
                           as float));
                           
1 row inserted.

推荐阅读