《ORACLE中ESCAPE关键字用法》由会员分享,可在线阅读,更多相关《ORACLE中ESCAPE关键字用法(10页珍藏版)》请在金锄头文库上搜索。
1、ORACLE 中 ESCAPE 关键字用法2012-09-19 00:00 比特网悠虎关键字:定义:escape 关键字经常用于使某些特殊字符,如通配符:%,_ 转义为它们原来的字符的意义,被定义的转义字符通常使用,但是也可以使用其他的符号。实例:SQL select * from t11 where name like %_%;NAME-aa_aaaaSQL select * from t11 where name like %_% escape ;NAME-aa_a注意:如果是 / 作为检索字符, 必须 用 / 作为转义符, 正斜扛也一样。select * from wan_test wh
2、ere psid like %/% escape /1. 使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。2.ESCAPE escape_character 允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用途的字符。select * from a WHERE name LIKE %/%ab ESCAPE /结果为:name-11%ab12%ab=SQL select * from test;TEST-sdd_kkdddfsfsadffa%asfs123451%23451%54321
3、2%54321%54321A&B已选择 9 行。其中包含特殊的字符分别为%,_,&,有可能包含这些字符的数据含有错误,或者需要查找包含这些字符的数据。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转义字符为=;SQL se
4、lect * from test where test like sdd/_% escape /;TEST-sdd_kk 转义字符为/;SQL select * from test where test like sddd_% escape d; 转义字符和转义字符后面的一个字符的成对的,转义字符本身不参加匹配,如果转义字符后面的一个字符本身没有特殊意义,会提示转义字符无效未选定行转义字符为 d,没有实现转义功能 ;SQL select * from test where test like %_% escape ;TEST-sdd_kk查找包含所有_的字段。同理:通过这种方法查找含有%的所有
5、字段:SQL select * from test where test like % escape ;TEST-dffa%asfs1%23451%543212%54321%54321但是&不能通过转义字符查找:SQL select * from test where test like %&% escape;select * from test where test like %&% escape*第 1 行出现错误:ORA-01424: 转义符之后字符缺失或非法可以通过另外的方式进行转义:SQL select ascii(&) from dual;ASCII(&)-38SQL select
6、 * from test where test like %|chr(38)|%;TEST-A&B的转义:SQL select * from test where test like %;TEST-dd特殊符号的数据的插入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 definedefine & (hex 26)S
7、QL set define offSQL show definedefine OFFSQL insert into test values(test&test);已创建 1 行。SQL show escapeescape OFFSQL set escape onSQL show escapeescape (hex 5c)SQL insert into test values(test&test);已创建 1 行。SQL select * from test;TEST-sdd_kkdddfsfsadffa%asfs123451%23451%543212%54321%54321A&Btesttes
8、ttest&testtest&test已选择 13 行。SQL commit;提交完成。SQL select * from test;TEST-sdd_kkdddfsfsadffa%asfs123451%23451%543212%54321%54321A&Btesttesttest&testtest&test已选择 13 行。SQL insert into test values(test%test);已创建 1 行。SQL insert into test values(test_test);已创建 1 行。SQL insert into test values(testtest);inse
9、rt into test values(testtest)*第 1 行出现错误:ORA-00917: 缺失逗号SQL insert into test values(testtest);已创建 1 行。SQL select * from test;TEST-sdd_kkdddfsfsadffa%asfs123451%23451%543212%54321%54321A&Btesttesttest&testtest&testtest%testtest_testtesttest已选择 16 行。连接符|导致了新一轮的转义:连接符号| 左右的单引号没有任何的关系,除非|是作为字符串的一部分(这在动态 SQL 中很常见)。SQL SELECT ORACLE| FROM DUAL;ORACLE|-ORACLE个人理解,ORACLE| 后面的“”应该认为是一个字符串(即前后单引号,中间是“”串,而中间又是密集单引号,因此第一个为转义功能)SQL SELECT ORACLE FROM DUAL;ORACLE-ORACLE对于第一个,前两个单引号配对,后面四个单引号按照上面的第一条原则分配,既:SELECT ORACLE| FROM DUAL;对于第二个,由于第二个单引号后面存在单引号,所以就不与第一个配对,而是充当了转义的角色。既:SELECT ORACLE FROM DUAL;