oracle中的字符串處理的特殊字符

一、用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章