【问题标题】:Using regexp_like in Oracle to match on multiple string conditions using a range of values在 Oracle 中使用 regexp_like 使用一系列值匹配多个字符串条件
【发布时间】:2021-07-14 13:13:54
【问题描述】:

我的 Oracle DB 中有一个包含代码的字段,我需要使用一系列值从中提取多个值。

例如,我需要提取C00.0 - C39.9 范围内的所有代码,即以 C 开头,第二个字符可以是 0-3,第三个字符是 0-9,后跟一个“。”然后最后一个数字是 0-9 例如

CODES
-----
C00.0
C10.4
C15.8
C39.8

上面的例子是一个模式,我有多个模式要匹配,这里是另一个例子

C50.011-C69.92

同样,以 C 开头,第二个字符是 5-6,第三个是 0-9,第四个是“.”,第五个是 0-9,第六个是 1-2 等等。

我尝试了以下方法,但我的管道函数似乎没有接受第二个条件,因此我只得到第一个条件的结果'^[C][0-3][0-9][.][0-9]'

SELECT DISTINCT CODES
FROM
TABLE
WHERE REGEXP_LIKE (CODES,   '^[C][0-3][0-9][.][0-9]|
                             ^[C][4][0-3][.][0-9]|
                             ^[C][4][A][.][0-9]|
                             ^[C][4][4-9][.][0-9]|
                             ^[C][4][9][.][A][0-9]|
                             ^[C][5-6][0-9][.][0-9][1-9]|
                             ^[C][7][0-5][.][0-9]|
                             ^[C][7][A-B][.][0-8]')
ORDER BY CODES

如果有人能就如何提取其他模式提出建议,我将不胜感激。

【问题讨论】:

    标签: sql oracle regexp-like


    【解决方案1】:

    您的模式中有换行符 - 换句话说,您对可读性的尝试导致了问题。您可以删除它们,尽管我可能会排除常见的元素:

    WHERE REGEXP_LIKE (CODES, '^[C]([0-3][0-9][.][0-9]|[4][0-3][.][0-9]|[4][A][.][0-9]|[4][4-9][.][0-9]|[4][9][.][A][0-9]|[5-6][0-9][.][0-9][1-9]|[7][0-5][.][0-9]|[7][A-B][.][0-8])')
    

    我想你最后也想要$

    如果你想要可读性,你可以使用or:

    SELECT DISTINCT CODES
    FROM TABLE
    WHERE REGEXP_LIKE (CODES, '^[C][0-3][0-9][.][0-9]') OR
          REGEXP_LIKE (CODES, '^[C][4][0-3][.][0-9]|') OR
          . . . 
    

    【讨论】:

      【解决方案2】:

      这是您要在此处匹配的正则表达式模式:

      ^C[0-3][0-9][.][0-9]$
      

      Demo

      这将匹配C00.0 - C39.9 的范围。如果你想匹配 other 范围,那么你需要使用另一个模式来覆盖这些范围。

      将此应用于您当前的查询:

      SELECT DISTINCT CODES
      FROM yourTable
      WHERE REGEXP_LIKE (CODES, '^C[0-3][0-9][.][0-9]$');
      

      【讨论】:

        猜你喜欢
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 2015-12-08
        相关资源
        最近更新 更多