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
相关产品推荐
相关产品推荐

