【问题标题】:Using REGEXP_LIKE in Oracle在 Oracle 中使用 REGEXP_LIKE
【发布时间】:2018-11-30 09:10:32
【问题描述】:

在 MyTable 表中,我在 MyField 列中有以下数据,大小为 80 个字符:

MyField
-------
WA
W
W51534
W
W

我试图通过 regexp_like 排除以 WA 开头的行。但以下查询返回 W51534 行而不是 W 行:

select MyField
    from MyTable
    where regexp_like (upper (ltrim (MyField)), '^ [W][^A]');

我希望它也返回 W 行。我该怎么做?

提前谢谢你

【问题讨论】:

  • 编辑您的问题并向我们展示真正的问题。
  • 如果 MyField 为 NULL 怎么办?

标签: oracle regexp-like


【解决方案1】:

您甚至可能不需要在这里使用REGEXP_LIKE,普通的LIKE 就足够了:

SELECT MyField
FROM MyTable
WHERE MyField NOT LIKE 'WA%';

Demo

【讨论】:

  • 是的,我知道。但对我来说,在 regex_like 中这样做很重要,因为不同的地方有不同的情况。但我不知道为什么 ^[W][[:space:]] 也不起作用。认为
  • 问题是空格。当我使用 rpad 时,它可以工作。这不方便,但它有效。 regexp_like (upper(rpad(MyField,80,'#')), '^[W][^A]')
【解决方案2】:

最后,正如我在评论中所说,我通过添加 rpad 命令解决了我的问题:
regexp_like (upper(rpad(MyField,80,'#')), '^[W][^A]');
如果有人有更好的想法,我很感兴趣。
认为

【讨论】:

    【解决方案3】:

    你可以否定 regexp_like,让它匹配你不想要的模式:

    with mytable(id, myfield) as (
      select 1, 'WA' from dual union all
      select 2, 'W' from dual union all
      select 3, 'W51534' from dual union all
      select 4, 'Z' from dual union all
      select 5, '' from dual
    )
    select id, myfield
    from mytable
    where not regexp_like(upper(myfield), '^WA') or 
    myfield is null
    order by id; 
    

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2017-07-21
      • 2010-11-28
      • 2019-11-17
      相关资源
      最近更新 更多