`

oracle sql 转义

阅读更多

 

   今天要在字段里查找'%',涉及到oracle的转义字符,现总结如下:

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;

 

 

 

http://hi.baidu.com/fuguoliang/blog/item/1e67bf03ecae7d743812bb7b.html

分享到:
评论

相关推荐

    SQL Server 到 Oracle 的SQL 语法自动翻译器源码

    SQL的过程中对调用者传进的SQL进行转换后再执行,就基本完成了整个系统的SQL语法从SQL Server到Oracle的 兼容,呵呵,听起来有点不可思议。系统已经于3个月前上线,目前运行很稳定。 如果有人用得着或发现什么...

    ORACLE SQL 语句(典型应用总结).pdf

    根据提供的文档信息,本文将对《ORACLE SQL 语句(典型应用总结)》中的关键知识点进行详细解读与总结。 ### 第一章 基本SELECT语句 #### 1. SQL语法要求 在Oracle中编写SQL语句时,需要注意以下几点: - **大小写...

    Oracle中转义字符的详细介绍

    此外,了解其他常见的SQL转义字符也很重要。例如,在某些SQL方言中,反斜杠(\)用于转义,但Oracle并不使用反斜杠。在Oracle中,如果你需要在字符串中插入反斜杠,也需要使用两个反斜杠(\\)来表示一个实际的反...

    Oracle SQL

    Oracle SQL是Oracle数据库中使用的标准SQL语言,它包括数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(DCL)等。Oracle SQL的核心是用于数据查询和操作的一组命令,这些命令广泛应用于数据库的增删改查操作。 ...

    SQL中的转义字符

    对于单引号 `'` 的转义,Oracle中仍然只接受双单引号 `''` 的方式,而MySQL提供了两种选择:双单引号 `''` 或者反斜杠加单引号 `'\''`,这在编写跨数据库兼容的SQL语句时需要特别注意。 总的来说,了解SQL中的转义...

    Oracle的SQL语法大全

    Oracle SQL是用于管理和操作Oracle数据库的关键工具,涵盖了数据查询、数据操纵、数据定义等多种功能。以下是对Oracle SQL语法的详细解析: **一、数据控制语句 (DML)** 1. **INSERT**: 插入数据到表中。有两种...

    最全的ORACLE-SQL笔记

    【Oracle SQL笔记详解】 Oracle SQL是用于访问和操作Oracle数据库的强大工具,涵盖了各种查询、更新和管理数据的方法。以下是对笔记中提及的一些关键知识点的详细解释: 1. **登录Oracle数据库**:通常以超级管理...

    浅谈oracle中单引号转义

    ORACLE 单引号转义: 在ORACLE中,单引号有两个作用:   1:字符串是由单引号引用   2:转义。  单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解  1.从第二个单引号开始被视为...

    Oracle-SQL培训-V1.0

    根据提供的文档内容,我们可以归纳并深入探讨Oracle SQL的相关知识点,主要围绕SELECT语句及其使用方法展开。 ### Oracle-SQL培训-V1.0 #### 第一单元:SELECT语句 **SELECT语句的作用** - **列选择**:通过指定...

    从实践中学习OracleSQL

    Oracle SQL 是一种强大的数据库查询语言,它用于在Oracle数据库系统中检索、操作和管理数据。以下是一些关于Oracle SQL的基本知识点,这些知识点来自于所给的文件摘要: 1. **简单查询语句**: - `SELECT`语句常...

    Oracle_SQL语句大全教程

    ### Oracle SQL语句大全教程知识点解析 #### 一、表结构描述 - **知识点1:DESC 命令** - `DESC` 是一个非常有用的命令,用于查看表的结构,包括字段名称、数据类型等。 - **示例:** - `DESC EMP`: 描述名为 `...

    oracle经典sql案例

    根据提供的文件信息,以下是从标题、描述和部分内容中提取的关于Oracle经典SQL案例的知识点: 标题知识点: - Oracle经典SQL案例:这部分表明文档内容是围绕Oracle数据库系统中的SQL语句展开的,涵盖了多种SQL用法...

    从实践中学习oracleSQL读书笔记

    Oracle SQL是一种强大的数据库查询语言,广泛应用于数据管理和分析。以下是从《从实践中学习 oracle/SQL》一书第一章和第二章中提取的知识点: 1. **简单查询语句**:基本的查询语句由`SELECT`和`FROM`构成,如`...

    ORACLESQL拼接语句.pdf

    Oracle SQL是数据库管理中用于操作和管理Oracle数据库的重要工具,主要包含数据控制语言(DML)和数据定义语言(DDL)两大类。以下将详细解释这两个部分的主要知识点。 一、数据控制语言(DML) 1. INSERT INSERT...

    ORACLE常用的SQL命令

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的SQL语法用于数据操作、定义和管理。本文将详细介绍Oracle中常用的SQL命令,特别关注数据控制语句(DML)和数据定义语句(DDL)。 1. 数据控制语句 ...

    Oracle SQL培训笔记

    ### Oracle SQL 培训笔记知识点详解 #### 一、常用 SQL 语句 1. **聚合查询(Group By)** - **语法**: `SELECT name, COUNT(*) FROM table WHERE ... GROUP BY name;` - **说明**: 使用 `GROUP BY` 子句对指定...

    Oracle 复习用脚本

    这里使用了通配符`%`和转义字符`\`。 **2. 分页查询** 使用`ROWNUM`进行分页查询,例如: ```sql SELECT * FROM (SELECT * FROM EMP ORDER BY HIREDATE DESC) WHERE ROWNUM ; ``` **3. 联合查询** 联合两个或多...

Global site tag (gtag.js) - Google Analytics