oracle 拆分逗号转行_一个列用逗号隔开,列转行,看看是否有更好的办法。
表mytest1,??表結(jié)構(gòu),初始數(shù)據(jù)如下:
SQL> desc mytest1;
Name? ?? ???Type? ?? ?? ???Nullable Default Comments
----------- -------------- -------- ------- --------
DEPART_ID? ?VARCHAR2(10)? ?Y
OBJECT_NAME VARCHAR2(4000) Y復(fù)制代碼
SQL> select * from mytest1;
DEPART_ID??OBJECT_NAME
---------- --------------------------------------------------------------------------------
helpdesk? ?FILE$,I_FILE1,I_IND1,I_PROXY_ROLE_DATA$_1
human? ?? ?CON$,ICOL$,I_OBJ3
manager? ? C_COBJ#,I_CDEF2,I_OBJ#
spy? ?? ???I_CDEF4,I_FILE#_BLOCK#,I_OBJ5,I_TS#,UET$
tech? ?? ? I_CON1,I_USER1,PROXY_ROLE_DATA$,UNDO$
由于列object_name全部為逗號分隔,希望轉(zhuǎn)化為:
DEPART_ID??SUBSTR(OBJECT_NAME,DECODE(LEVE? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???LEVEL
---------- -------------------------------------------------------------------------------- ----------
helpdesk? ?FILE$? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 1
helpdesk? ?I_FILE1? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???2
helpdesk? ?I_IND1? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?3
helpdesk? ?I_PROXY_ROLE_DATA$_1? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 4
human? ?? ?CON$? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???1
human? ?? ?ICOL$? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 2
human? ?? ?I_OBJ3? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?3
manager? ? C_COBJ#? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???1
manager? ? I_CDEF2? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???2
manager? ? I_OBJ#? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?3
spy? ?? ???I_CDEF4? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???1
spy? ?? ???I_FILE#_BLOCK#? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 2
spy? ?? ???I_OBJ5? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?3
spy? ?? ???I_TS#? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 4
spy? ?? ???UET$? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???5
tech? ?? ? I_CON1? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?1
tech? ?? ? I_USER1? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???2
tech? ?? ? PROXY_ROLE_DATA$? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???3
tech? ?? ? UNDO$? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 4
目前我采用的SQL如下:
SELECT distinct depart_id,
substr(object_name,
DECODE(LEVEL,
1,
1,
regexp_count(object_name, ',') + 1,
INSTR(object_name,
',',
1,
regexp_count(object_name, ',')) + 1,
INSTR(object_name, ',', 1, LEVEL - 1) + 1),
DECODE(LEVEL,
regexp_count(object_name, ',') + 1,
INSTR(REVERSE(object_name), ',', 1) - 1,
INSTR(object_name, ',', 1, LEVEL) -
DECODE(LEVEL,
1,
1,
INSTR(object_name, ',', 1, LEVEL - 1) + 1))),
LEVEL
from mytest1
CONNECT BY LEVEL <= regexp_count(object_name, ',') + 1
order by depart_id, level;
由于CONNECT BY 這個地方?jīng)]有什么限制,所以垃圾數(shù)據(jù)太多,通過distinct過濾之后數(shù)據(jù)是沒問題,應(yīng)該還有更簡單的SQL。 誰能try 一下。
總結(jié)
以上是生活随笔為你收集整理的oracle 拆分逗号转行_一个列用逗号隔开,列转行,看看是否有更好的办法。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台安变频器n2按键说明_台安N2变频器说
- 下一篇: 谈谈对python 和其他语言的区别_谈