`
allen413
  • 浏览: 95757 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

oracle escape

阅读更多

昨天看ppt看到escape这边,顺便把转义字符的一些东西在网上找了一下.正好曲径幽深 有一个篇,就转过来了.

SQL> select * from test;

TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&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> select * 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

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

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

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

TEST
--------------------
dffa%asfs
1%2345
1%54321
2%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('&')
----------
        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%2345
1%54321
2%54321
%%54321
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%2345
1%54321
2%54321
%%54321
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%2345
1%54321
2%54321
%%54321
A&B
testtest

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

已选择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;

分享到:
评论

相关推荐

    Oracle练习笔试大全

    Oracle练习笔试大全 1、select ename, sal * 12 from emp; //计算年薪 2、select 2*3 from dual; //计算一个比较纯的数据用dual表 3、select sysdate from dual; //查看当前的系统时间 4、select ename, sal*12 ...

    oracle dba必备脚本

    --监控索引是否使用 ... where cv.indx=pi.indx and pi.ksppinm like '\_%' escape '\' and pi.ksppinm like '%meer%';  --求系统中较大的latch  select name,sum(gets),sum(misses),sum(sleeps),sum(wait_time)

    Oracle事例

    sql> alter index xay_id allocate extent(size 200k datafile \'c:/oracle/index.dbf\'); <8>.alter index xay_id deallocate unused; 、查看索引 SQL>select index_name,index_type,table_name from user...

    历史上最强的sql FAQ for Oracle

    [A]select * from table where name like 'A\_%' escape(避开) '\' [Q]如何插入单引号到数据库表中 [A]可以用ASCII码处理,其它特殊字符如&也一样,如 insert into t values('i'||chr(39)||'m'); -- chr(39)代表...

    简单明了区分escape、encodeURI和encodeURIComponent

    主要介绍了escape、encodeURI和encodeURIComponent的区别,需要的朋友可以参考下

    oracle10g超级帮助文件(中文版).chm

    [A]select * from table where name like 'A\_%' escape '\' [Q]如何插入单引号到数据库表中 [A]可以用ASCII码处理,其它特殊字符如&也一样,如 insert into t values('i'||chr(39)||'m'); -- chr(39)代表字符' ...

    Oracle 获得以百分号结尾的脚本有三种写法

    数据如图: 目标是获得ID=4443的数据行,简单记录一下三种...第二种,escape: SELECT * FROM TEST A WHERE A.NOTE LIKE '%\%' escape '\'; 第三种,正则表达式: SELECT * FROM TEST WHERE REGEXP_LIKE(NOTE,'%$');

    精通SQL 结构化查询语言详解

    6.5.5 使用ESCAPE定义转义符  第7章 连接符、数值运算与函数  7.1 本章实例用到的表 7.2 连接符 7.2.1 连接符的应用  7.2.2 使用别名 7.3 数值运算  7.3.1 数学运算符的种类 7.3.2 数学运算符的运用 ...

    unidac 7.4.11 pro for RAD Studio 10.3

    QuoteNames option in TUniLoader to escape field names is added Bug with mapping a TEXT field to ftWideMemo in Delphi is fixed Bug with SQL statements containing a CONTAINS predicate in the WHERE ...

    Devart UniDAC 7.4.11 Professional for RAD Studio 10.3 Rio

    QuoteNames option in TUniLoader to escape field names is added Bug with mapping a TEXT field to ftWideMemo in Delphi is fixed Bug with SQL statements containing a CONTAINS predicate in the WHERE ...

    UnidacPro8.0.1Rio.rar

    v8.0.1 RAD Studio 10.3 Rio is supported Support of UPPER and LOWER ...Oracle 12 is fixed Bug with using the IFILE option in TNSNAMES.ORA is fixed SQLServer data provider QuoteNames option in TUniLoader ...

    UnidacProv8.0.1Tokyo.rar

    v8.0.1 RAD Studio 10.2 Tokyo is supported Support of UPPER and LOWER...Oracle 12 is fixed Bug with using the IFILE option in TNSNAMES.ORA is fixed SQLServer data provider QuoteNames option in TUniLoader ...

    SQL中的转义字符

    之前写了篇文章《Oracle转义字符》,说到了Oracle中单引号“’”的转义字符是单引号“’”,那么其他的特殊字符的转义字符...  select * from tb where col like '%\%%' or col like '%\_%' escape ''  sql中“escap

    精通SQL--结构化查询语言详解

    6.5.5 使用escape定义转义符 115 第7章 连接符、数值运算与函数 117 7.1 本章实例用到的表 117 7.2 连接符 118 7.2.1 连接符的应用 118 7.2.2 使用别名 119 7.3 数值运算 121 7.3.1 数学运算符的种类 121 ...

    WebCruiser - Web Vulnerability Scanner(Web漏洞扫描器)

    * Adcanced:Proxy,Escape Filter; * Report Output. Download: http://sec4app.com/download/WebCruiser.rar 帮助文档: CHM格式: http://sec4app.com/download/WebCruiserUserGuide.rar PDF格式: ...

    SQL21日自学通

    Escape Character in Your Statement--Invalid Character 485 Cannot Create Operating System File 485 Common Logical Mistakes485 Using Reserved Words in Your SQL statement 486 The Use of DISTINCT When ...

    SQL培训第一期

    escape关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原来的字符的意义,被定义的转义字符通常使用'\',但是也可以使用其他的符号。 select * from Student_a where name like '%$%%' escape '$'; 1.7.6...

    SpyVR:使用Unity和SteamVR完成的不对称逃生室之类的VR游戏

    游戏的场景是一个间谍任务,涉及两个玩家: VR玩家和Oracle玩家。 首先是在VR世界内部(使用HTC vive)并充当间谍。 第二个-所谓的Oracle-在幕后行动并指导间谍执行任务。 Oracle公司从最高处看到现场,并有一个...

    2009达内SQL学习笔记

    如:select table_name from user_tables where table_name like 'S\_%' escape'\'; ' 找出“S_“开头的,由于下划线有任意字符的含义,故需另外定义转移符。 但习惯用“\”,为方便其他程序员阅读和检测,一般不...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

Global site tag (gtag.js) - Google Analytics