Oracle SUM( TO_NUMBER( REGEXP_SUBSTR 带小数

Oracle SUM( TO_NUMBER( REGEXP_SUBSTR WITH DECIMAL NUMBER

我有这样的查询

SELECT SUM( TO_NUMBER( REGEXP_SUBSTR( '2,0,0,0,0,0,8.36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0', '\d+', 1, LEVEL ) ) ) AS SUM_TOTAL
FROM   DUAL
CONNECT BY LEVEL <= REGEXP_COUNT( '2,0,0,0,0,0,8.36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0', '\d+' );

我的结果是 46,小数 (8.36) 被计算为单个数字,例如 (2 + 8 + 36) = 46。

我正在努力获得结果 (2 + 8.36) = 10.36

有可能得到这个结果吗?

提前致谢

您需要跳过逗号而不是 '\d+'

使用'[^,]+'

所以你的查询将是

我有这样的查询

SELECT SUM( TO_NUMBER( REGEXP_SUBSTR( '2,0,0,0,0,0,8.36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0', '[^,]+', 1, LEVEL ) ) ) AS SUM_TOTAL
FROM   DUAL
CONNECT BY LEVEL <= REGEXP_COUNT( '2,0,0,0,0,0,8.36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0', ',' ) + 1;

如果您确定您的字符串是数字的逗号分隔列表,包括十进制数、负数、指数计数法等,可能被空格包围,您可以使用 [^,]+ 而不是 \d+ 修改查询(在两个地方)。这一次选择所有连续非逗号字符的子串,而不是一次选择所有连续数字的子串。