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'
);
insert
into
test
values
(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
c
from
(
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
) mobile
FROM
test
CONNECT
BY
PRIOR
id = id
AND
PRIOR
dbms_random.VALUE
IS
NOT
NULL
AND
LEVEL
<= length(phone) - length(
REPLACE
(phone,
','
)) + 1