Oracle regexp_like 得到错误的结果

Oracle regexp_like getting wrong results

我有这个像 select 并且工作正常:

select * from printers where 
         printer_id like 'XERX-15%' Or printer_id like 'OFFJT-16%' ;

我正在尝试将表达式转换为 regexp_like 因为我有很多这样的条件,

select * from printers where
    regexp_like(printer_id,'XERX-15%|OFFJT-16%')

似乎给出了错误的结果...

create table printers(printer_id varchar(50));
insert into printers values('XERX-1500');
insert into printers values('XERX-1550');
insert into printers values('XERX-1560');
insert into printers values('XERX-1570');
insert into printers values('XERX-1601');
insert into printers values('XERX-1601');
insert into printers values('XERX-1602');
insert into printers values('XERX-1603');
insert into printers values('OFFJT-1504');
insert into printers values('OFFJT-1604');

select * 来自打印机 printer_id 喜欢 'XERX-15%' 或 printer_id 喜欢 'OFFJT-16%' ;

select * 来自打印机 regexp_like(printer_id,'XERX-15%|OFFJT-16%')

http://sqlfiddle.com/#!4/44c23

% 不是正则表达式中的通配符。

你想要:

select *
from   printers
where  regexp_like(printer_id,'^(XERX-15|OFFJT-16)')
  • ^ 匹配字符串的开头 then
  • XERX-15OFFJT-16

如果您不想使用捕获组 () 那么您可以等效地使用:

select *
from   printers
where  regexp_like(printer_id,'^XERX-15|^OFFJT-16')

% 符号是 like 通配符。在您的正则表达式中,它是一个文字字符;所以删除它:

regexp_like(printer_id,'XERX-15|OFFJT-16')

或者只在行首匹配(就像你原来的那样):

regexp_like(printer_id,'^(XERX-15|OFFJT-16)')

SQL fiddle