您的位置:首页 > 数据库 > Oracle

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

2015-05-24 23:26 465 查看
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)去替代’&’!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: