以下正则表达式分隔逗号分隔的普通值
(SELECT regexp_substr(:pCsv,'[^,]+', 1, level)
FROM DUAL
CONNECT BY regexp_substr(:pCsv, '[^,]+', 1, level) IS NOT NULL);
示例:
300100033146068, 300100033146071 , 300100033146079
返回
300100033146068
300100033146071
300100033146079
如果我们使用带有SQL IN运算符的正则表达式
,这可以正常工作select *
from mytable
where t.mycolumn IN (SELECT regexp_substr(:pCsv,'[^,]+', 1, level)
FROM DUAL
CONNECT BY regexp_substr(:pCsv, '[^,]+', 1, level) IS NOT NULL);
但如果逗号分隔值是单引号字符串文字
,则此查询无效'one' , ' two' , 'three'
答案 0 :(得分:2)
作为评论中提到的sln,您的正则表达式匹配任意数量的非,
字符。这意味着它将匹配'one'
,而不是您期望的one
。
要排除单引号和空格,您需要将它们添加到排除字符列表中。
您的新内部查询应如下所示:
SELECT regexp_substr(:pCsv,'[^,'' ]+', 1, level)
FROM DUAL
CONNECT BY regexp_substr(:pCsv, '[^,'' ]+', 1, level) IS NOT NULL
请注意,我们必须使用''
来表示单引号,因为它出现在另一个字符串中。