Oracle开发中的正则表达式

举报
数据社 发表于 2022/09/25 02:12:18 2022/09/25
【摘要】 今天在一个技术讨论群里有人问了一个问题,@我了一下,我就看了一眼。问题给了一个字符串,字符串里有数字有字母有特殊符号,需求是取该字符串中连续的数字。要求用正则表达式。我对正则表达式也不是精通,一知半解。就帮他看了一下,想了一个思路: 1、先找到第一个数字出现的位置; 2、从第一个数字的位置开始,找到第一个非数字出现的位置; 3、然...

今天在一个技术讨论群里有人问了一个问题,@我了一下,我就看了一眼。问题给了一个字符串,字符串里有数字有字母有特殊符号,需求是取该字符串中连续的数字。要求用正则表达式。我对正则表达式也不是精通,一知半解。就帮他看了一下,想了一个思路:

1、先找到第一个数字出现的位置;

2、从第一个数字的位置开始,找到第一个非数字出现的位置;

3、然后从第一个出现数字的位置开始截取字符,截取到第一个非字符的位置

根据以上思路写了一个函数如下:

 create or replace  function fc_get_number_lx(i_str in varchar2) return varchar2 is
  
    v_num1 number;
    v_num2 number;
    v_str  varchar2(1000);
  begin
  
    select regexp_instr(i_str, '\d', 1, 1) into v_num1 from dual;
    select regexp_instr(i_str, '\D', v_num1, 1) into v_num2 from dual;
  
    select substr(i_str, v_num1, v_num2 - v_num1) into v_str from dual;


    return v_str;
  end;


end pkg_qcf_tool;


当然,也可以直接取值,不写成函数,把上面的函数内容直接写一条语句即可:

select substr(i_str, regexp_instr(i_str, '\d', 1, 1), regexp_instr(i_str, '\D', regexp_instr(i_str, '\d', 1, 1), 1) - regexp_instr(i_str, '\d', 1, 1)) into v_str from dual;select substr(i_str, v_num1, v_num2 - v_num1) from dual;


不知道能不能直接使用正则表达式,有兴趣的可以试一下~~


文章来源: dataclub.blog.csdn.net,作者:数据社,版权归原作者所有,如需转载,请联系作者。

原文链接:dataclub.blog.csdn.net/article/details/47666745

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。