在 Oracle 中, 將某一個欄位的多行數據轉換成使用逗號風格的一行顯示,可以使用函數 wmsys.wm_concat 達成。
這個在上一篇http://www.Bkjia.com/database/201204/128928.html
參考這一段 “
Case 1: 列轉換行。 以一行顯示所有員工的名字
select wmsys.wm_concat(NAME) from employee;
結果: user1,user2現在有個問題, 反過來如何顯示? 也就是說有一個欄位的值類似: user1,user2, 現在要把它拆分成兩行顯示。
方法就是使用函數: regexp_substr
這個函數, 看名字一個正則表達式匹配的函數。 具體的格式如下:
使用例子的話,
對於 user1, user2 , 如果要匹配第二個的話(user2)的話, 可以使用以下 SQL:
SELECT REGEXP_SUBSTR('user1,user2','[^,]+',1,2,'i') AS STR FROM DUAL;結果 : user2
如果要匹配所有的話,使用如下方式:
SELECT REGEXP_SUBSTR('user1,user2','[^,]+',1,LEVEL,'i') AS STR FROM DUAL CONNECT BY LEVEL<3;
user1
user2
看起來達成效果了。 不過這裡的LEVEL, 很多狀況下是一個變量, 是可以通過運算得出來的。
完善一下:
SELECT REGEXP_SUBSTR('user1,user2','[^,]+',1,LEVEL,'i') AS STR FROM DUAL CONNECT BY LEVEL<=LENGTH('user1,user2') - LENGTH(REGEXP_REPLACE('user1,user2', ',', ''))+1;
select LENGTH('user1,user2') - LENGTH(REGEXP_REPLACE('user1,user2', ',', ''))+1 from dual;