You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle数据库中将字符串拆分为数组?附计算示例

Oracle中拆分字符串并求和的实现方法

针对输入字符串'3/5/7'拆分后求和得到15的需求,以下是几种实用的Oracle实现方案:

1. 通用递归查询(兼容所有Oracle版本)

利用REGEXP_SUBSTR正则提取结合递归层级LEVEL,直接拆分字符串并求和:

SELECT SUM(TO_NUMBER(REGEXP_SUBSTR('3/5/7', '[^/]+', 1, LEVEL))) AS total_sum
FROM DUAL
CONNECT BY REGEXP_SUBSTR('3/5/7', '[^/]+', 1, LEVEL) IS NOT NULL;
  • 逻辑:REGEXP_SUBSTR按/分隔符依次提取每个子串,递归层级LEVEL控制提取次数,直到提取不到有效内容为止,最后用SUM对提取出的数字求和。

2. Oracle 12c+ 简洁JSON解析方案

如果你的Oracle版本是12c及以上,可以借助JSON_TABLE快速将字符串转成行数据再求和:

SELECT SUM(TO_NUMBER(val)) AS total_sum
FROM JSON_TABLE(
    '["' || REPLACE('3/5/7', '/', '","') || '"]',
    '$[*]' COLUMNS (val VARCHAR2(100) PATH '$')
);
  • 逻辑:先通过REPLACE把原字符串转成合法的JSON数组格式,再用JSON_TABLE将数组元素解析为单独的行,最后求和。

3. PL/SQL中拆分到数组并求和

如果需要将拆分结果存入数组(比如后续要做其他逻辑处理),可以用PL/SQL块实现:

DECLARE
    TYPE number_array IS TABLE OF NUMBER;
    v_split_array number_array;
    v_input_str VARCHAR2(100) := '3/5/7';
    v_total NUMBER := 0;
BEGIN
    -- 将拆分后的数字批量存入数组
    SELECT TO_NUMBER(REGEXP_SUBSTR(v_input_str, '[^/]+', 1, LEVEL))
    BULK COLLECT INTO v_split_array
    FROM DUAL
    CONNECT BY REGEXP_SUBSTR(v_input_str, '[^/]+', 1, LEVEL) IS NOT NULL;
    
    -- 遍历数组计算总和
    FOR idx IN v_split_array.FIRST .. v_split_array.LAST LOOP
        v_total := v_total + v_split_array(idx);
    END LOOP;
    
    DBMS_OUTPUT.PUT_LINE('拆分后的数组元素总和:' || v_total);
END;
/
  • 逻辑:用BULK COLLECT将拆分结果一次性存入自定义的数字数组,再通过循环遍历数组累加求和,适合需要对拆分后的数据做复杂处理的场景。

内容的提问来源于stack exchange,提问作者Noname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:56:03