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)去替代’&’!