工作中我们经常会碰到将一个字符串以固定的符号分隔成多行的需求,现在我将介绍一个分隔的方法。
表:
xh kc
1 语文,数学,英语
2 政治,历史,地理
3 地理,语文
4 地理,数学
想把上面的表拆分为:
1 语文
1 数学
1 英语
2 政治
2 历史
2 地理
4 地理
4 数学
3 地理
3 语文
Oracle 中可以使用层次查询语句结合子查询或随机数完成,这里给出对应写法:
select xh,regexp_substr(kc,'[^,]+',1,level) kc
from t0052
connect by level <= (length(regexp_replace(kc,'[^,]+','')))+1
and rowid= prior rowid
and prior dbms_random.value is not null;
但是Oracle使用分隔符进行分隔效率很低,查20W条数据大概要16分钟,因此建议从数据库中查询出来后直接用代码分隔而不是用数据库。
参考文章: