一位同事在使用SQL处理一串字符时,出现一个意料之外的问题:这个字符串中包括字符‘&’。我们先看一下现象:
 
 
SQL> select * from v$version;
 
 
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
 
SQL> select substr('asdf&yuechaotian', 1, 1) from dual;
输入 yuechaotian 的值:
原值    1: select substr('asdf&yuechaotian', 1, 1) from dual
新值    1: select substr('asdf', 1, 1) from dual
 
 
S
-
a
 
因为这里的&提示后面的字符串是一个变量,提示我输入子串yuechaotian的值。直接输入回车后,这个字符串就变成'asdf',进行substr操作。比如此时我取第5个字符,就会返回null了:
 
 
SQL> select substr('asdf&yuechaotian', 5, 1) from dual;
输入 yuechaotian 的值:
原值    1: select substr('asdf&yuechaotian', 5, 1) from dual
新值    1: select substr('asdf', 5, 1) from dual
 
 
S
-
 
 
此时只要将字符‘&’转义一下就好。转义字符是由SQL*PLUS的参数escape来控制的:
 
 
-- 默认情况下,escape是关闭的
SQL> show escape
escape OFF
-- 打开escape,默认使用'\'作为转义字符
SQL> set escape on
SQL> show escape
escape "\" (hex 5c)
-- 此时使用'\'将字符'&'转义
SQL> select substr('asdf\&yuechaotian', 1, 1) from dual;
 
 
S
-
a
 
-- 转义字符只是用来转义,本身是不占字符位置的
SQL> select substr('asdf\&yuechaotian', 5, 1) from dual;
 
 
S
-
&
 
转义字符只转义它后面的一个字符:
 
 
-- 此时第一个'\'将第二个'\'转义,&表示后面的子串yuechaotian是变量,不输入任何值,得到子串'asdf\'
SQL> select substr('asdf\\&yuechaotian', 5, 1) from dual;
输入 yuechaotian 的值:
原值    1: select substr('asdf\\&yuechaotian', 5, 1) from dual
新值    1: select substr('asdf\', 5, 1) from dual
 
 
S
-
\
 
 
-- 此时第一个'\'将第二个'\'转义,第三个'\'将'&'转义,得到子串'asdf\&yuechaotian'
SQL> select substr('asdf\\\&yuechaotian', 5, 1) from dual;
 
 
S
-
\
 
SQL> select substr('asdf\\\&yuechaotian', 5) from dual;
 
 
SUBSTR('ASDF\
-------------
\&yuechaotian
 
其实你也可以自己制定转义字符,不一定要使用'\'。比如你的字符串里本身就有字符'\',你需要找一个特殊点的字符作为转义字符:
 
 
SQL> set escape #
SQL> show escape
escape "#" (hex 23)
SQL> select substr('asdf\\\#&yuechaotian', 5) from dual;
 
 
SUBSTR('ASDF\\\
---------------
\\\&yuechaotian
 
 
http://blog.chinaunix.net/uid-298599-id-2443124.html

转 SQL - 字符串中的转义字符的更多相关文章

  1. MyBatis Sql语句中的转义字符

    1.在xml的sql语句中,不能直接用大于号.小于号要用转义字符 如果用小于号会报错误如下: org.apache.ibatis.builder.BuilderException: Error cre ...

  2. java中如何忽略字符串中的转义字符--转载

    原文地址:http://my.oschina.net/u/1010578/blog/366252 起因     这几天工作上需要跟另一个同事联调rest接口,我这边是java他是php,返回报文是js ...

  3. SQL查询中的转义字符

    转载自http://blog.csdn.net/Adi_liu/archive/2007/12/06/1920606.aspx   如果想查找“_cs”结尾的的账户 select * from [us ...

  4. C# 过滤SQL 字符串中的 参数

    /// <summary> /// 参数过滤 /// </summary> /// <param name="parameters"></ ...

  5. SQL*PLUS中批量执行SQL语句

    SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...

  6. C#格式化字符串中转义大括号“{}”

    原文:C#格式化字符串中转义大括号"{}" 今天,用C#写程序操作Excel,读取单元格内容根据所需格式生成字符串,使用String.Format(string format,ob ...

  7. 如何去掉C#字符串中的所有空格(转载)

    如何去掉C#字符串中的所有空格 来源:https://www.cnblogs.com/donchen/p/8966059.html 字符串行数Trim()可以去掉字符串前后的空格,如:  C# Cod ...

  8. 如何去掉C#字符串中的所有空格

    字符串行数Trim()可以去掉字符串前后的空格,如:  C# Code  string myString = " this is a test "; Console.WriteLi ...

  9. string.format格式化字符串中转义大括号“{}”

    今天,用Java读取配置文件占位符,使用String.Format(string format,object arg0)方法.以前只知“{0}”为索引占位符(即格式项),与参数列表中的第一个对象相对应 ...

随机推荐

  1. [Angular] Communicate Between Components Using Angular Dependency Injection

    Allow more than one child component of the same type. Allow child components to be placed within the ...

  2. [LeetCode] Contains Duplicate(II,III)

    Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...

  3. Office EXCEL 如何为宏命令指定快捷键或者重新设置快捷键

    1 工具-宏-宏,打开宏窗口   2 鼠标单击任意宏将其选中,点击宏选项,即可修改或为他增加快捷键.   3 注意,你直接在Visual Basci编辑器里面改是不行的,因为加了'的只是注释而已  

  4. UI 07 _ 导航视图控制器 与 属性传值

    首先, 先创建三个VC. 完毕点击按钮, 进入下一页, 并可以返回. 要先把导航视图控制器创建出来. 在AppDelegate.m 文件里代码例如以下: #import "AppDelega ...

  5. &lt;一&gt;读&lt;&lt;大话设计模式&gt;&gt;之简单工厂模式

    工厂模式尽管简单.可是写下这篇文章却不简单. 第一:本人经过内心的挣扎后才决定開始写博文的.为什么呢,由于好长时间没有写了,对自己的文学功底也是好不自信.可是技术这东西你不写出来你真不知道自己掌握多少 ...

  6. fedora下安装xdot和objgraph

    前提:安装好了python 1.先下载xdot-0.6.tar.gz和objgraph-1.8.0-py27-none-any.whl,你也可以在官网上下载其他版本. 2.下载完后,解压. 3.打开终 ...

  7. gnu-ucos 增加 bmp 位图显示

    昨天又下了点功夫弄了个在tft屏幕上显示bmp位图的. 我选择的是24位tft真彩測显示方式所以也要选择真彩色位图.网上给出的16位位图数组无法使用.在csdn上下载了2个制作工具,一个是c代码的,一 ...

  8. 针对OpenSSL吐嘈的吐嘈-如此唱反调

    前些天写了一篇<令人作呕的OpenSSL>,顿时引来了大量的恶评.令我非常尴尬,同一时候也认为悲哀. 假设说you can you up之类的,我认为起码这人看出了我的本意,仅仅是怀疑我的 ...

  9. hibernate could not resolve property

    映射文件字段不匹配 这个异常一般是因为映射文件造成的: 1.hibernate.config.xml中添加的映射文件是否正确 2.映射文件中的类是否正确指定. 3.映射文件映射的属性名是否跟类中的属性 ...

  10. JDBC各种数据库连接URL关键代码

    通过JDBC连接数据库时,各个数据库有着不同的URL格式,为了方便大家使用,我在以下提供了常见的7种数据库连接示例代码,请根据实际需要进行相应的更改. 1.Oracle数据库 Class.forNam ...