2014-03-27 43 views
1

我在我的數據庫中有一行,包含一些名稱的字段,用;分隔。查詢根據字段將行拆分爲x行

我想通過Select查詢獲取儘可能多的行,以便在我的字段中有名稱。

所以,如果我在DB有:

id names 
1 john;jack;mike 

有了這個,我必須用這個查詢得到:

SELECT id, split(names, ';') from table 

1 john 
1 jack 
1 mike 

我沒有任何其他的表,所以沒有加入。

我寫:split(names,';'),但這只是我想要做的一個例子。

但我不知道如何拆分我的字段名稱,像前面這樣做。

我沒有發現任何東西來幫助我,找到一種方法來做到這一點。

我需要使用一個函數嗎?使用oracle有沒有這樣的功能?

謝謝。

+0

可能重複http://stackoverflow.com/questions/14328621/oracle-10g-splitting-string-into-multiple-行) –

+0

@PeterLang幾乎,但在這個其他問題的答案不適合我,而由BhupeshC這裏的答案完美契合,感謝事先看來。編輯鏈接一個問題與不正確的答案是沒有真正相關的。 –

回答

1
SELECT id, TRIM(REGEXP_SUBSTR(names, '[^;]+', 1, LEVEL)) FROM table_name 
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(names, '[^;]+')) + 1 
AND PRIOR id = id 
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL 

SQL Fiddle

[Oracle 10g的分割字符串轉換成多行(的
+0

這是完美的。你可以用'PRIOR'關鍵詞來補充一下,最後兩行的解釋嗎? –