当初设计表的不太合理,将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》
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》
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20777547/viewspace-1375786/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20777547/viewspace-1375786/