0

在 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 行。我该怎么办?

先感谢您

4

3 回答 3

0

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

于 2018-11-30T12:48:50.780 回答
0

你可以否定 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; 
于 2018-11-30T14:47:25.703 回答
0

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

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

演示

于 2018-11-30T09:17:51.357 回答