我有一个表T1,它有一个VARCHAR2列C1。 列C1可以具有诸如John' Jimmy,Marco' Daniel' Robert,Wayne'之类的值。等等 请注意,该值本身可以使用逗号。
我必须构造一个SQL查询或函数,它接受这些名称的单个字符串并输出不同行中的名称。
E.g 输入字符串:Daniel,Jimmy,Marco,John
输出行:丹尼尔 吉米,马尔科 约翰
我尝试使用以下查询但如果值本身有逗号则失败。 但是,如果我在输入字符串的值中没有任何逗号,则它可以正常工作。
select C1 from T1 where C1 in
(select str from
(SELECT REGEXP_SUBSTR ('input string', '[^,]+', 1, LEVEL) as str FROM dual
CONNECT BY LEVEL <= (select LENGTH (REPLACE ('input string', ',', NULL)) from dual))
)
答案 0 :(得分:0)
您必须以某种方式指定要忽略的逗号。那么可以用双引号将它们括起来吗? 如果是这样,以下查询可能适合您。
示例输入:
Suresh,"Rajesh,Ramesh"
输出
Suresh
Rajesh Ramesh
<强>查询:强>
with my_data(names) as
(
select 'Mahesh' as str from dual
union all
select '"Vignesh,Ganesh"' from dual
union all
select 'Suresh,"Rajesh,Ramesh"' from dual
union all
select 'Tamanna' from dual
),
my_data_stripped(names) as
(
SELECT REPLACE(regexp_replace(names,'(")([^"|,]+)(,)([^"]+)(")','\1\2 \4\5'),'"') FROM MY_DATA
)
SELECT REGEXP_SUBSTR(names,'[^,]+',1,LEVEL) AS test
FROM my_data_stripped
CONNECT BY REGEXP_SUBSTR(names,'[^,]+',1,LEVEL) IS NOT NULL
AND PRIOR names = names
AND PRIOR sys_guid() IS NOT NULL;
<强>结果:强>
TEST
-----------------
Mahesh
Suresh
Rajesh Ramesh
Tamanna
Vignesh Ganesh