sql - 在 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 中使用?
解决方案
您可以使用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
推荐阅读
- spring - 弹簧启动执行器 - 自定义执行器的用例
- discord - 机器人在发送嵌入后立即崩溃
- python - 将输入数据拟合成高斯分布
- php - UVdesk 应用程序经常被注销
- expo - Expo发送OTA更新
- java - 从 Firebase 下载 Pdf 文件并更新进度条上的进度
- android - 如何在“WorkManager”中设置最小时间间隔
- rpa - 在全局处理程序中,当我在 If 条件下使用 SystemException 时,为什么 SelectorNotFoundException 不属于 Systemexception
- node.js - node.js异步多个等待不适用于用户注册
- css - 如何在一个部门的css中只设置边框底部颜色