我有作为值如下字符串:逗号分隔字符串列表
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