Oracle中转义字符总结

xiaoxiao2021-02-28  106

在字段里查找'%',涉及到Oracle的转义字符,现总结如下: 表:

SQL> select * from test;

TEST -------------------- sdd_kk d'd dfsfsa dffa%asfs 12345 1#45 1T321 2T321 %T321 A&B

已选择9行。

        其中包含特殊的字符分别为%,_,&,有可能包含这些字符的数据含有错误,或者需要查找包含这些字符的数据。

============= 

 转义字符为' ': SQL> select * from test where test like 'sdd _%' escape ' ';

TEST -------------------- sdd_kk

注:sdd与_之间有空格。

 ==================================

转义字符为'\':

SQL> select * from test where test like 'sdd\_%' escape '\';

TEST -------------------- sdd_kk

 ==================================

 转义字符为'=': SQL> select * from test where test like 'sdd=_%' escape '=';

TEST -------------------- sdd_kk

 ==================================

转义字符为'/':

SQL> select * from test where test like 'sdd/_%' escape '/';

TEST -------------------- sdd_kk

 ==================================

转义字符为d,没有实现转义功能:

SQL> select * from test where test like 'sddd_%' escape 'd';

未选定行

 ==================================

查找包含所有'_'的字段:

SQL> select * from test where test like '%\_%' escape '\';

TEST -------------------- sdd_kk

 ==================================

        同理:通过这种方法查找含有'%'的所有字段:

SQL> select * from test where test like '%\%%' escape '\';

TEST -------------------- dffa%asfs 1#45 1T321 2T321 %T321

 ==================================       

 但是'&'不能通过转义字符查找:

SQL> select * from test where test like '%\&%' escape'\'; select * from test where test like '%\&%' escape'\'                                    * 第 1 行出现错误: ORA-01424: 转义符之后字符缺失或非法

        可以通过另外的方式进行转义:

SQL> select ascii('&') from dual;

ASCII('&') ----------         38

SQL> select * from test where test like '%'||chr(38)||'%';

TEST -------------------- A&B

 ==================================        

   '''的转义:

SQL> select * from test where test like '%''%';

TEST -------------------- d'd

特殊符号的数据的插入

SQL> insert into test values('test&test'); 输入 test 的值: test 原值    1: insert into test values('test&test') 新值    1: insert into test values('testtest')          -虽然插入,但是数据不对。

已创建 1 行。

SQL> show define define "&" (hex 26) SQL> set define off SQL> show define define OFF SQL> insert into test values('test&test');

已创建 1 行。

SQL> show escape escape OFF SQL> set escape on SQL> show escape escape "\" (hex 5c) SQL> insert into test values('test\&test');

已创建 1 行。

SQL> select * from test;

TEST -------------------- sdd_kk d'd dfsfsa dffa%asfs 12345 1#45 1T321 2T321 %T321 A&B testtest

TEST -------------------- test&test test&test

已选择13行。

SQL> commit;

提交完成。

SQL> select * from test;

TEST -------------------- sdd_kk d'd dfsfsa dffa%asfs 12345 1#45 1T321 2T321 %T321 A&B testtest

TEST -------------------- test&test test&test

已选择13行。

SQL> insert into test values('test\%test');

已创建 1 行。

SQL> insert into test values('test\_test');

已创建 1 行。

SQL> insert into test values('test\'test); insert into test values('test'test)                               * 第 1 行出现错误: ORA-00917: 缺失逗号

SQL> insert into test values('test''test');

已创建 1 行。

SQL> select * from test;

TEST -------------------- sdd_kk d'd dfsfsa dffa%asfs 12345 1#45 1T321 2T321 %T321 A&B testtest

TEST -------------------- test&test test&test test%test test_test test'test

已选择16行。

转载请注明原文地址: https://www.6miu.com/read-41862.html

最新回复(0)