首页 > 解决方案 > 在 LIKE 中转义通配符

问题描述

在 Oracle 中使用 SQL 运算符时如何转义通配符 ( _and ) ?%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 中使用?

标签: sqloraclesql-like

解决方案


您可以使用escape语法

您可以使用标识转义字符的子句来包含实际字符%_模式中的字符。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                                              

推荐阅读