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+
修改查询(在两个地方)。这一次选择所有连续非逗号字符的子串,而不是一次选择所有连续数字的子串。
我有这样的查询
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+
修改查询(在两个地方)。这一次选择所有连续非逗号字符的子串,而不是一次选择所有连续数字的子串。