sql中,在like操作符里,%代表一个或多个字符,而_代表一个(仅仅一个)字符。
SQL> create table qt1(name varchar2(10));
表已创建。
SQL> insert into qt1 values('ABCD');
已创建 1 行。
SQL> insert into qt1 values('_BCDE');
已创建 1 行。
SQL> insert into qt1 values('_\BCDE');
已创建 1 行。
SQL> insert into qt1 values('_''BCDE');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from qt1;
NAME
----------
ABCD
_BCDE
_\BCDE
_'BCDE
SQL>
ok,我们要查询记录的name字段包含BCD的记录,怎么写?
SQL> select * from qt1 where name like '%BCD%';
NAME
----------
ABCD
_BCDE
_\BCDE
_'BCDE
SQL>
很明显,返回结果是正确的。
我们要包含_BCD的记录,怎么写?
SQL> select * from qt1 where name like '_BCD%';
NAME
----------
ABCD
_BCDE
SQL>
很明显,返回结果不对,第一条记录是不想要的。
SQL> select * from qt1 where name like '\_BCD%' escape '\';
NAME
----------
_BCDE
SQL>
这下对了。那么我们需要返回_\BCDE呢?
SQL> select * from qt1 where name like '\_\\BCD%' escape '\';
NAME
----------
_\BCDE
SQL>
需要返回_'BCDE呢?
SQL> select * from qt1 where name like '\_\'BCD%' escape '\';
ERROR:
ORA-01756: 引号内的字符串没有正确结束
SQL> select * from qt1 where name like '\_''BCD%' escape '\';
NAME
----------
_'BCDE
SQL>
所以,需要对单引号进行转义时,只能在单引号前面再添加一个单引号来进行转义,而使用escape声明的的转义符不行。