我有作爲值如下字符串:逗號分隔字符串列表
Countries = USA, Canada, Italy
我想它們分開,並顯示爲列表類似下面
Countries
USA
Canada
Italy
我該怎麼做使用SQL?
我有作爲值如下字符串:逗號分隔字符串列表
Countries = USA, Canada, Italy
我想它們分開,並顯示爲列表類似下面
Countries
USA
Canada
Italy
我該怎麼做使用SQL?
您可以通過
select regexp_substr('USA, Canada, Italy','[^,]+', 1, level) from dual
connect by regexp_substr('USA, Canada, Italy', '[^,]+', 1, level) is not null;
但國家並非一直是靜態的......它可能會改變用戶到另一個.. 順便說一句「 - 員工自定義屬性」.TEXT_0是我的colomn標題。 我想用逗號分隔符顯示這個列表中的任何值。 謝謝, –
這隻適用於單行數據 - 當存在多個輸入行時,'CONNECT BY'子句將開始在行之間生成連接,並且會生成許多許多重複的行。 – MT0
使用regex_substr和連接有發佈Oracle文檔頁面的Splitting Delimited Strings主題的多種解決方案。
一個是:
示例數據:
CREATE TABLE table_name (id, list) AS
SELECT 1, 'a,b,c,d' FROM DUAL UNION ALL -- Multiple items in the list
SELECT 2, 'e' FROM DUAL UNION ALL -- Single item in the list
SELECT 3, NULL FROM DUAL UNION ALL -- NULL list
SELECT 4, 'f,,g' FROM DUAL; -- NULL item in the list
查詢:
SELECT t.id,
v.COLUMN_VALUE AS value,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY ROWNUM) AS lvl
FROM table_name t,
TABLE(
CAST(
MULTISET(
SELECT REGEXP_SUBSTR(t.list, '([^,]*)(,|$)', 1, LEVEL, NULL, 1)
FROM DUAL
CONNECT BY LEVEL < REGEXP_COUNT(t.list, '[^,]*(,|$)')
)
AS SYS.ODCIVARCHAR2LIST
)
) v;
輸出:
ID ITEM LVL
---------- ------- ----------
1 a 1
1 b 2
1 c 3
1 d 4
2 e 1
3 (NULL) 1
4 f 1
4 (NULL) 2
4 g 3
@a_horse_with_no_name這個問題不是這個問題的重複 - 是的,最初的部分是相似的,但是那個問題的OP想要對項目進行分組和計數 - 接受的答案會生成太多的行來正確回答這個問題然後使用'COUNT()'來忽略NULL值來獲得該問題的答案。是的,這可能應該作爲重複關閉,但不能與該目標關聯。 – MT0
更好的重複(但我們無法鏈接到文檔頁面):http://stackoverflow.com/documentation/oracle/1968/splitting-delimited-strings#t=201702141232438006307 – MT0
另一個重複 - http:// stackoverflow。 com/questions/17419160/connect-by-to-generate-rows-from-multiple-delimited-string – MT0