一、用escape定義轉義字符
在sql中我們可以使用‘%’、‘_’等通配符進行模糊查詢,比如下面,會查詢到所有ename以A開頭的所有人員:
09:59:47 SCOTT@vbox88in*SQL>select * from emp1 where ename like 'A%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
而如果要匹配的字符串中含有‘%’、‘_’等通配符呢,我們要怎麼查詢,比如有下面t2表:
NAME
------------------------------------------------------------
hyman
h_man
_man
h%man
我如果要查name以’h%'開頭的數據,要怎麼編寫sql語句?按照通常的思路:
10:13:24 SCOTT@vbox88in*SQL>select * from t2 where name like 'h%%';
NAME
------------------------------------------------------------
hyman
h_man
h%man
這顯然不是我們預期的結果,要實現這一查詢功能,我們可以藉助escape關鍵字,將任意一個字符定義成一個轉義字符,比如:
10:18:25 SCOTT@vbox88in*SQL>select * from t2 where name like 'h!%%' escape '!';
NAME
------------------------------------------------------------
h%man
escape將字符’!'定義成了一個轉義字符,後面接的%被當成一個普通字符,而不是一個通配符。
二、單引號的轉義
比如我們想要輸出‘hyman’s home’這樣一個字符串,因爲字符串中含有單引號,我們無法直接用使用單引號進行拼接:
10:47:38 SCOTT@vbox88in*SQL>select 'hyman'||''s home' from dual;
ERROR:
ORA-01756: 引號內的字符串沒有正確結束
此時,需要我們用兩個單引號來輸出一個單引號:
10:48:09 SCOTT@vbox88in*SQL>select 'hyman'||'''s home' from dual;
'HYMAN'||'''
------------
hyman's home
三、使用特殊符號q
符號q可以定義一段普通字符串,不管字符串中是否有特殊符號,都會被當成普通字符處理,其格式定義如下:
q'分隔符xxxxx分隔符'
其中分隔符可以是任意字符,但是必須得成對出現,比如使用!xxx!、#xxxx#,但是使用{、[、<此類對稱字符字符時,必須兩邊得字符都要使用,比如我們還是輸出‘hyman’s home’字符串,使用q關鍵字就可以這樣編寫sql語句:
10:58:48 SCOTT@vbox88in*SQL>select q'{hyman,s home}' from dual;
Q'{HYMAN,SHO
------------
hyman,s home