Oracle中使用escape關鍵字實現like匹配特殊字元,以及&字元的轉義
阿新 • • 發佈:2019-01-25
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是能夠成功轉義’%’, ‘