17,086
社区成员
发帖
与我相关
我的任务
分享
create table T1
(
s_name VARCHAR2(10),
s_age NUMBER,
s_class VARCHAR2(10),
s_subject VARCHAR2(100)
);
INSERT INTO t1 VALUES ('小明', 10, '三年级', '语文、数学、音乐');
INSERT INTO t1 VALUES ('小红', 11, '四年级', '美术、数学、古典音乐');
WITH a1 AS
(SELECT s_name, s_age, s_class, regexp_substr(s_subject, '[^、]+', 1, 1) s1,
regexp_substr(s_subject, '[^、]+', 1, 2) s2, regexp_substr(s_subject, '[^、]+', 1, 3) s3,
regexp_substr(s_subject, '[^¡¢]+', 1, 4) s4
FROM t1)
SELECT s_name, s_age, s_class, s1
FROM a1
WHERE s1 IS NOT NULL
UNION ALL
SELECT s_name, s_age, s_class, s2
FROM a1
WHERE s2 IS NOT NULL
UNION ALL
SELECT s_name, s_age, s_class, s3
FROM a1
WHERE s3 IS NOT NULL
UNION ALL
SELECT s_name, s_age, s_class, s4 FROM a1 WHERE s4 IS NOT NULL ORDER BY s_name;
select distinct name,age,grade,regexp_substr(subject,'[^[:punct:]]+',1,level) subject
from test
connect by level<=regexp_count(subject,'[[:punct:]]')+1;