一、用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