【问题标题】:Oracle SQL - REGEXP_LIKE contains characters other than string 'NA'Oracle SQL - REGEXP_LIKE 包含字符串“NA”以外的字符
【发布时间】:2019-09-12 13:22:31
【问题描述】:

我想创建一个查询,在其中选择包含a-zA-Z 字符的所有记录,不允许使用字符串'NA'

select *
  from tz_customers c 
 where REGEXP_LIKE(c.customercode,'^NA');

REGEXP_LIKE 允许其他字符串'NA' 以外的所有字符

【问题讨论】:

    标签: sql regex oracle regexp-like


    【解决方案1】:

    我可能会使用不等式比较来排除NA

    SELECT *
    FROM tz_customers
    WHERE
        REGEXP_LIKE(customercode, '^[A-Za-z]+$') AND
        customercode <> 'NA';
    

    原则上,我们可以尝试在单个正则表达式模式中使用负前瞻来排除 NA,但我不确定 Oracle 正则表达式是否支持。

    【讨论】:

    • 根据 OP 的真正含义,第二个条件可能是 LIKE '%NA%'
    【解决方案2】:

    如果您想要不以NA 开头的字符串,则:

    SELECT *
    FROM   tz_customers c
    WHERE  c.customercode NOT LIKE 'NA%'
    

    如果您想要不包含 NA 的字符串,那么:

    SELECT *
    FROM   tz_customers c
    WHERE  c.customercode NOT LIKE '%NA%'
    

    如果您想要不完全是 NA 的字符串,那么:

    SELECT *
    FROM   tz_customers c
    WHERE  c.customercode <> 'NA'
    

    如果您想要只有字母字符的字符串,那么您可以使用TRANSLATE 去除允许的字符并测试剩余的字符串是否为空(NULL):

    SELECT *
    FROM   tz_customers c
    WHERE  TRANSLATE(
             c.customercode,
             '1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
             '1'
           ) IS NULL
    

    如果你想将两者结合起来:

    SELECT *
    FROM   tz_customers c
    WHERE  TRANSLATE(
             c.customercode,
             '1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
             '1'
           ) IS NULL
    AND    c.customercode <> 'NA'
    

    所以对于样本数据:

    CREATE TABLE tz_customers ( customercode ) AS
      SELECT 'NA'      FROM DUAL UNION ALL
      SELECT 'BANANA'  FROM DUAL UNION ALL
      SELECT 'BANANA2' FROM DUAL;
    

    这个输出:

    |客户代码 | | :----------- | |香蕉 |

    db小提琴here

    【讨论】:

      【解决方案3】:

      我认为你不需要 regexp_like:

        select * from tz_customers where customer_code not like '%NA%'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        • 1970-01-01
        • 2019-07-20
        • 2019-04-24
        • 2013-04-08
        • 2015-05-30
        相关资源
        最近更新 更多