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%')
%
不是正则表达式中的通配符。
你想要:
select *
from printers
where regexp_like(printer_id,'^(XERX-15|OFFJT-16)')
^
匹配字符串的开头 then
XERX-15
或 OFFJT-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)')
我有这个像 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%')
%
不是正则表达式中的通配符。
你想要:
select *
from printers
where regexp_like(printer_id,'^(XERX-15|OFFJT-16)')
^
匹配字符串的开头 thenXERX-15
或OFFJT-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)')