1. 程式人生 > >Oracle中使用escape關鍵字實現like匹配特殊字元,以及&字元的轉義

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;--閉替代變數的功能

這裡寫圖片描述

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