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

Oracle 9i数据库中如何提取字符串里的首个整数?

Oracle 9i 提取字符串中首个连续整数的实现方法

由于Oracle 9i不支持正则表达式函数,无法直接使用REGEXP_SUBSTR,可以通过自定义PL/SQL函数来实现提取首个连续整数的需求,以下是具体方案:

自定义PL/SQL函数

创建一个名为extract_first_number的函数,通过遍历字符串定位首个数字的起始位置,再计算连续数字的长度,最终截取目标数字段:

CREATE OR REPLACE FUNCTION extract_first_number(p_str IN VARCHAR2) RETURN VARCHAR2 IS
    v_pos NUMBER;
    v_len NUMBER;
    v_char CHAR(1);
BEGIN
    -- 定位第一个数字的位置
    v_pos := 1;
    WHILE v_pos <= LENGTH(p_str) LOOP
        v_char := SUBSTR(p_str, v_pos, 1);
        IF v_char BETWEEN '0' AND '9' THEN
            EXIT;
        END IF;
        v_pos := v_pos + 1;
    END LOOP;
    
    -- 无数字则返回空字符串
    IF v_pos > LENGTH(p_str) THEN
        RETURN '';
    END IF;
    
    -- 计算连续数字的长度
    v_len := 0;
    WHILE v_pos + v_len <= LENGTH(p_str) LOOP
        v_char := SUBSTR(p_str, v_pos + v_len, 1);
        IF v_char BETWEEN '0' AND '9' THEN
            v_len := v_len + 1;
        ELSE
            EXIT;
        END IF;
    END LOOP;
    
    -- 截取并返回连续数字
    RETURN SUBSTR(p_str, v_pos, v_len);
END;
/

使用示例

函数创建完成后,可直接用于查询语句,替代高版本的REGEXP_SUBSTR:

SELECT name, extract_first_number(address) AS street_num FROM people;

测试验证

针对给出的测试案例,函数均可返回预期结果:

  • extract_first_number('Count 1,2,3...') → '1'
  • extract_first_number('3.1415 is pi') → '3'
  • extract_first_number('I saw 11 Olds 442s today') → '11'
  • extract_first_number('Part number 12,345') → '12'
  • extract_first_number('Order 5 100 piece kits') → '5'
  • extract_first_number('ABcdEFg') → ''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:10:28