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