开发者社区> 秦超峰> 正文

Oracle开发中的正则表达式

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


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


版权声明:本文内容由便宜云服务器实名注册用户自发贡献,版权归原作者所有,便宜云服务器开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《便宜云服务器开发者社区用户服务协议》和《便宜云服务器开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
oracle数据库实际项目中开发经验总结(上)
  1、在ORACLE中返回游标结果集   写包:   create or replace package pag_cs_power as   type c_Type is ref cursor;   FUNCTION FUN_CS_GETDICTLIST(   v_DictIndex in varchar2) return c_Type;   end pag_cs_power;   函数:
191 0
Oracle/Mysql迁移到Postgresql事务回滚行为差异(开发避坑系列)
Mysql或Oracle迁移到Postgresql系产品后,经常会发生事务回滚导致的问题,具体问题一般都是类似于: **为什么我没rollback,我的事务就自己回滚了?** 下面我举一个简单的例子,说明下PG和其他两款DB在事务回滚行为上的差异 ## Oracle事务内报错后的行为 (完整代码贴在文章最后) ```java Class.fo
700 0
+关注
秦超峰
微信公众号:数据社,专注大数据架构,数据仓库,MPP数据库技术干货分享,中国DBA联盟成员,墨天伦、51CTO多个社区技术专家。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
迁移 ORACLE 最佳实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像


http://www.vxiaotou.com