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

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;--闭替代变量的功能

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第1张图片

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

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第2张图片

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

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第3张图片

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

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第4张图片

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

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

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第5张图片

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

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第6张图片

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

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第7张图片

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

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义_第8张图片

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

你可能感兴趣的:(oracle,sql)