在LIKE中转义通配符

时间:2018-06-27 17:13:02

标签: sql oracle sql-like

在Oracle中使用SQL _运算符时,如何转义通配符(%LIKE)?

我今天遇到一个愚蠢的问题。我需要使用_在varchar列上搜索下划线LIKE的存在。正如预期的那样,它不起作用-因为根据SQL,下划线是通配符。这是我的(简化)代码:

create table property (
  name varchar(20),
  value varchar(50)
);

insert into property (name, value) values ('port', '8120');
insert into property (name, value) values ('max_width', '90');
insert into property (name, value) values ('taxrate%', '5.20');

我在PostgreSQL中尝试了以下查询,它们返回了我想要的行:

select * from property where name like '%\_%'; -- should return: max_width

select * from property where name like '%\%%'; -- should return: taxrate%

不幸的是,它在Oracle 12c中不起作用。是否有“标准”的转义通配符方式?还是至少在Oracle中有效?

1 个答案:

答案 0 :(得分:5)

您可以使用the escape syntax

  

您可以使用%子句在模式中包含实际字符_ESCAPE,该子句标识转义字符。如果转义字符在模式中的字符%_之前,则Oracle会在模式中按字面意义解释该字符,而不是将其解释为特殊的模式匹配字符。

因此您可以这样做:

select * from property where name like '%\_%' escape '\';

NAME                 VALUE                                             
-------------------- --------------------------------------------------
max_width            90                                                

select * from property where name like '%\%%' escape '\';

NAME                 VALUE                                             
-------------------- --------------------------------------------------
taxrate%             5.20