【问题标题】:regex_substr: regular expression to extract the comma separated string literalsregexp_substr:用于提取逗号分隔的字符串文字的正则表达式
【发布时间】:2015-01-09 16:39:41
【问题描述】:

以下正则表达式分隔逗号分隔的纯值

(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'

【问题讨论】:

  • [^,']+ 怎么样?

标签: sql regex oracle regexp-substr


【解决方案1】:

正如 cmets 中提到的 sln,您的正则表达式匹配任意数量的非, 字符。这意味着它将匹配'one',而不是您期望的one

要排除单引号和空格,您需要将它们添加到排除的字符列表中。

您的新内部查询应如下所示:

SELECT regexp_substr(:pCsv,'[^,'' ]+', 1, level)
FROM DUAL
CONNECT BY regexp_substr(:pCsv, '[^,'' ]+', 1, level) IS NOT NULL

请注意,我们必须使用'' 来表示单引号,因为它出现在另一个字符串中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多