求助:
a表里面一个字段phone用来存储电话和固话,
oracle能否根据分号或者逗号来划分第一个有效的11位电话号码,固定电话排除。
13543364231;15989213791--中文分号,只取第一个13543364231
13138712139;2886905 --中文分号,取第一个13138712139
2871132;13686737699 --中文分号,取第二个13686737699
2211389/15818911218 ---斜杠号,取第二个15818911218
2295047,13413330936 --英文逗号,取第二个13413330936
2870810,13686736353 ---中文逗号,取第二个13686736353
------解决思路----------------------
给你个思路吧 先用替换函数TRANSLATE 替换分隔符为 统一字符 如 / ,然后 再进行拆分;我以前是用excel拆分的 - - 然后就可以提取了;不知道数据量有多大?phone字段确定只有两组号码吗?我遇到过乱起八糟的都有 - -
------解决思路----------------------
with t as
(select '13543364231;15989213791' str
from dual
union all
select '13138712139;2886905' str
from dual
union all
select '2871132;13686737699' str
from dual
union all
select '2211389/15818911218' str
from dual
union all
select '2295047,13413330936' str
from dual
union all
select '2870810,13686736353' str
from dual)
select decode(regexp_instr(str, '(;
------解决思路----------------------
;
------解决思路----------------------
/
------解决思路----------------------
,
------解决思路----------------------
,)'),
12,
substr(str, 1, 11),
substr(str, regexp_instr(str, '(;
------解决思路----------------------
;
------解决思路----------------------
/
------解决思路----------------------
,
------解决思路----------------------
,)') + 1))
from t;
------解决思路----------------------
以上语句支持任何间隔符,只要间隔符不是数字就可以