oracle一列中的数据有多个手机号码用逗号隔开,我如何分别取出来?
ID NUMBER
1 137xxxx,138xxxx
取出来成
ID NUMBER
1 137xxxx
1 138xxxx
create table test(id int,phone varchar2(200));insert into test values (1,'13811111111,13311111111,13900000000');insertintotestvalues(2,'15811111111,15911111111,18800000000');
第一种方式
select id,c from(with t as (select id,phone c from test)select id,substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) AS cfrom (select id,',' || c || ',' AS ca,length(c || ',') - nvl(length(REPLACE(c, ',')),0) AS cnt FROM t) t,(select LEVEL lv from dual CONNECT BY LEVEL <= 100) c where c.lv <= t.cnt) order by id第二种方式 由 li0924 提供非常感谢分享。
SELECT id, regexp_substr(phone, '[^,]+', 1, LEVEL) mobileFROM testCONNECT BY PRIOR id = id AND PRIOR dbms_random.VALUE IS NOT NULL AND LEVEL <= length(phone) - length(REPLACE(phone, ',')) + 1