Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义

本文介绍了在Oracle中如何使用escape关键字进行特殊字符(如'%')的模糊查询匹配,以及在处理'&'字符时遇到的问题和解决方案。通过示例展示了在不同情况下使用escape、转义符和chr()函数的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

escape 关键字用于定义转义符,在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。

1.首先创建测试表

create table STUDENTS
(
  ID   NUMBER,
  NAME VARCHAR2(10),
  AGE  NUMBER
)

2.插入含有特殊字符的数据数据,这里我主要以‘%’做测试

insert into students values (1,'aaaa',20);
insert into students values (2,'aa%a',18);
insert into students values (3,'aa%%',22);
insert into students values (4,'aaa&',16);
commit;

这里大家注意一点,插入的数据含有‘&’并且不是以‘&’结尾的时候要使用:

set define off;--闭替代变量的功能

这里写图片描述

3.使用escape关键字在模糊查询中查看name含有‘a%’的结果

这里写图片描述

我们看到现在已经得到正确的结果集,但是,好朋友突发奇想提出了说要匹配‘a%%’,当时没有多想,直接使用escape把‘a%’定义为转义符,结果:

这里写图片描述

oracle规定转义符只能是单字符,思索许久,终于想到两个特殊字符‘/’和‘\’.

这里写图片描述

我们看到‘/’和‘\’在查询结果匹配的时候是不占位的,所以建议大家在以后使用到escape的时候为方便起见可以选择‘/’和‘\’。

4.使用escape关键字模糊查询含有’&’的结果:

这里写图片描述

这个错误的意思就是在‘/’后面没有特殊字符。为什么呢?之前我们使用set define off关闭替代变量功能之后,&直接被当做普通字符,而不用escape。那么,我们使用set define on打开替代变量功能:

这里写图片描述

但是,打开替代变量功能后,在查询的时候可能要输入查询关键字,这是可以使用’&’的ascii来绕过这个障碍

这里写图片描述

使用chr(38)去替代特殊字符’&’

这里写图片描述

总结:对于使用escape关键字去转义特殊字符的时候,并不是对于所有的特殊字符都能够转义成功,上面的实验表明,对于’%’, ‘‘, ‘&’来说,使用escape是能够成功转义’%’, ‘‘的,但是却不能转义’&’,当然这只是默认的情况,如果我们将绑定变量的标识符设置为非默认的$,那么我们就可以把’&’当做普通字符对待了。如果不改变绑定变量的默认标识符,那么就使用chr(38)去替代’&’!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值