【发布时间】:2016-05-27 08:42:33
【问题描述】:
我有 myfield 作为 varchar2 类型,我尝试使用 sum(to_number(myfield)) 对这个字段求和,但结果是 ORA-01722 无效数字。
在发生此错误之前,我使用了 SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''))),它可以工作,但上周我在 myfield 中输入了一些十进制值,因此此代码不再工作。
这是我在 myfield 中的数据示例 10,12,13.5,NULL
【问题讨论】:
-
为什么需要那个 regexp_replace?这意味着“X1X2X3X4XX”将是 1234,你真的想要这个吗?
-
你
nls_numeric_characters设置为什么? -
从不在
varchar列中存储数字。改为修复您的表格设计。 -
我只想将存储为 varchar2 的数值相加
-
关键是,如果您为您的列使用了正确的数据类型,您一开始就不需要使用这样的技巧。不过,您需要清楚数值的含义;正如 Aleksej 所说,您的代码会将混合字符串中的任何数字视为数字,这可能不是您想要的; '13.5' 对你来说算数吗?那么“13,5”或“1,000.5”或“1.000,5”呢?