我很想知道为什么使用“NOT”是不可能的。但是,如果您正在寻找一个有趣的正则表达式解决方案,我认为 REGEXP_LIKE 不会起作用,因为 Oracle 风格不支持负前瞻。但是,跳出框框思考一下,如果找不到模式,则知道 REGEX_REPLACE 返回 NULL,您可以执行以下操作(尽管您可以这样做并不意味着您应该,我会使用 NOT 与 REGEXP_LIKE):
SQL> with tbl(str) as (
select 'INDIAN STANDARD TIME' from dual union all
select 'ATLANTIC STANDARD TIME' from dual union all
select 'IRISH STANDARD TIME' from dual union all
select 'EASTERN STANDARD TIME' from dual union all
select 'PST STANDARD TIME' from dual union all
select 'CST STANDARD TIME' from dual
)
select str
from tbl
where str = regexp_replace(str, '^(INDIAN|ATLANTIC|IRISH) STANDARD.*TIME', 'DO NOT WANT THESE');
STR
----------------------
EASTERN STANDARD TIME
PST STANDARD TIME
CST STANDARD TIME
SQL>
所以这会替换你不想要的字符串然后比较它们。由于未找到匹配项,因此选择不会返回它们。仍然不如以下干净:
select str
from tbl
where NOT regexp_like(str, '^(INDIAN|ATLANTIC|IRISH) STANDARD.*TIME');