如何解决如何对 Oracle 中不包括字符串值的列中的所有值求和?
我有一个表,我想计算两个字段的总和。但是,由于列中有不同的数据类型,因此在尝试对值求和时会导致错误。 我正在寻找一种方法来添加列中不包括非数字值的所有数字值。
这是我的桌子:
id | value | stock
1,-,45
1,30,45
2,-
2,-
3,400,55
3,60
4,404,55
这是我希望输出的样子:
id | value_total | stock_total
1,800,115
4,45
这是我的代码:
SELECT id,SUM(NVL(value_total,0)) AS volume_total,SUM(NVL(stock_total,0)) AS stock_total
FROM table1
group by id
我收到此错误:
ORA-01722: invalid number
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.
我的假设是错误来自列中的“-”值。在字段中添加所有数值但排除“-”值的任何提示或建议?
解决方法
您可以尝试使用 CASE
表达式和 regexp_like()
仅将表示数字(十进制表示法)的字符串传递给 to_number()
,否则返回 0
。类似的东西:
SELECT sum(CASE
WHEN regexp_like(value_total,'^(\+|-)?[0-9]*((.)?[0-9])[0-9]*$') THEN
to_number(value_total)
ELSE
0
END) value_total
FROM table1;
但理想情况下,您修复架构并为列使用适当的数据类型,即一些 number
变体。
将 to_number()
与 on conversion error
一起使用:
SELECT id,SUM(TO_NUMBER(value_total DEFAULT 0 ON CONVERSION ERROR) AS volume_total,SUM(TO_NUMBER(stock_total DEFAULT 0 ON CONVERSION ERROR) AS stock_total
FROM table1
GROUP BY id;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。