ORACLE列转行--某字段按指定分隔符转多行

在数据存储数据库中,常常存在信息以特殊符号隔开形式存储在一个字段里

 

将代码拷贝使用时,需要更改表名、字段名、分隔字符等(注:使用的时候还需将将N替换为分隔符的长度,如分割符“,”,长度位1,则将N替换位1,一共4处)。

SELECT id,substr(a.city, instr(a.city, '', 1, levels.lvl) + N, instr(a.city, '', 1, levels.lvl + 1) -(instr(a.city, '', 1, levels.lvl) + 1)-(N-1)) as city,username
FROM
(SELECT id,'' || city || '' AS city,username,(length(city || '') - nvl(length(REPLACE(city, '')), 0))/N AS cnt
FROM userinfomation) a,
(SELECT rownum AS lvl
FROM (SELECT (MAX(length(city || '') - nvl(length(REPLACE(city, '')), 0)))/N max_len FROM userinfomation)
CONNECT BY LEVEL <= max_len) levels
WHERE levels.lvl <= a.cnt
ORDER BY id,levels.lvl;

 

 

posted @ 2022-07-05 17:31  dcwange11  阅读(975)  评论(0编辑  收藏  举报