在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行。我该怎么办?
先谢谢您
答案 0 :(得分:0)
答案 1 :(得分:0)
最后,正如我在评论中所说,我通过添加rpad命令解决了我的问题:
regexp_like(upper(rpad(MyField,80,'#')),'^ [W] [^ A]');
如果有人有更好的主意,我会很感兴趣。
认为
答案 2 :(得分: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;