oracle通过正则分割字符串

手动迁移原创博客,原文发表在http://blog.itpub.net/20777547/viewspace-1375786/


当初设计表的不太合理,将name和code并到一个列去存储了,例如工商银行(01020000),现在要将其分开,一般通过substr和instr两个字符串函数就可以达到效果:

select substr('工商银行(01020000)',1,instr('工商银行(01020000)','(')-1),
substr('工商银行(01020000)',instr('工商银行(01020000)','(')+1,8)
from dual;

但是现在有一个问题,就是有的name里面也是包换括号的话,例如中国银行(马来西亚)(01040458),这样上面的写法就不对了。不过好在oracle里面也有正则函数的,可以通过regexp_instr达到我所需要的效果:

select substr('中国银行(马来西亚)(01040458)',1,regexp_instr('中国银行(马来西亚)(01040458)','\(\d{8}')-1),
substr('中国银行(马来西亚)(01040458)',regexp_instr('中国银行(马来西亚)(01040458)','\(\d{8}')+1,8)
from dual;

除了regexp_instr外,另外还有regexp_like,regexp_substr,regexp_replace,根据字面可以很容易理解到他们的实际含义,具体的用法可以参考oracle的《SQL Language Reference》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值