正文
Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
转:http://blog.chinaunix.net/uid-26896647-id-3433968.html
问题描述:如果在一个表中的一个字段上存在'&', '_', '%'这样的特殊字符,而我们又得在where条件中使用到这些特殊字符怎么办?
1.创建含有这些特殊字符的表
SQL> create table t_test_escape(name varchar2(20));
Table created
SQL> insert into t_test_escape(name) values('&_hello');
1 row inserted
--这里会提示我输入变量_hello的值,我没有输入任何值,所以为空!
SQL> select * from t_test_escape;
NAME
--------------------
结果自然也为空
SQL> truncate table t_test_escape;
Table truncated
--使用set define off 关闭替代变量的功能
SQL> set define off
SQL> insert into t_test_escape(name) values('&_hello');
1 row inserted
SQL> insert into t_test_escape(name) values('%%_hello');
1 row inserted
SQL> insert into t_test_escape(name) values('Oracle%&_hello');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from t_test_escape;
NAME
--------------------
&_hello
%%_hello
Oracle%&_hello
--使用set define off关闭变量替换功能之后,果然能够插入含有&的特殊字符了。
2.使用escape关键字在模糊查询中查看字符中含有%的字符串
SQL> select * from t_test_escape where name like '%a%%' escape 'a';
NAME
--------------------
%%_hello
Oracle%&_hello
--上面使用的转义字符为'a'
3.使用escape关键字模糊查询含有'&'的字符串
因为此时还是set define off的 所以这个时候&并不是什么特殊字符,所以下面的查询会报错
SQL> select * from t_test_escape where name like '%a&%' escape 'a';
select * from t_test_escape where name like '%a&%' escape 'a'
ORA-01424: missing or illegal character following the escape character
SQL> insert into t_test_escape(name) values('Oracle%&hello');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from t_test_escape where name like '%a&h%' escape 'a';
select * from t_test_escape where name like '%a&h%' escape 'a'
ORA-01424: missing or illegal character following the escape character
在set define off关闭替代变量功能之后可以直接将&当做普通字符,而不用escape
SQL> select * from t_test_escape where name like '%&h%';
NAME
--------------------
Oracle%&hello
使用set define on打开替代变量功能
SQL> set define on;
SQL> select * from t_test_escape where name like '%&h%';
--这里会提示我输入变量h的值,因为我没有输入任何值,这条sql条件相当于就是like '%%',所以返回全部数据
NAME
--------------------
&_hello
%%_hello
Oracle%&_hello
Oracle%&hello
--使用escape关键字指定特定的转义字符试试看
SQL> select * from t_test_escape where name like '%a&h%' escape 'a';
NAME
--------------------
还是会提示我输入变量h的值
--下面通过查询出'&'的ascii来绕过这个障碍
SQL> select ascii('&') from dual;
ASCII('&')
----------
38
--使用chr(38)去替代特殊字符'&'
SQL> select * from t_test_escape where name like '%' || chr(38) || 'h%';
NAME
--------------------
Oracle%&hello
4.使用escape关键字模糊查询含有'&'的字符串
SQL> select * from t_test_escape where name like '%a_%' escape 'a';
NAME
--------------------
&_hello
%%_hello
Oracle%&_hello
5.下面我将替代变量的特殊字符改为$试试,然后看能不能使用模糊匹配匹配特殊字符'&'
SQL> set define $
SQL> select * from t_test_escape where name like '%&h%';
NAME
--------------------
Oracle%&hello
总结:对于使用escape关键字去转义特殊字符的时候,并不是对于所有的特殊字符都能够转义成功,上面的实验表明,对于'%', '_', '&'来说,使用escape是能够成功转义'%', '_'的,但是却不能转义'&',当然这只是默认的情况,如果我们将绑定变量的标识符设置为非默认的$,那么我们就可以把'&'当做普通字符对待了。如果不改变绑定变量的默认标识符,那么就使用chr(38)去替代'&'!
来自为知笔记(Wiz)
Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义的更多相关文章- Oracle中使用escape关键字实现like匹配特殊字符,以及&;字符的转义
http://blog.chinaunix.net/uid-26896647-id-3433968.html http://soft.chinabyte.com/database/398/124298 ...
- Oracle 中的SELECT 关键字(查询、检索)
1. SELECT 关键字用法: 检索单个列:select 列名 from 表名: 例:select ename from emp;检索多个列: select [列1,列2, ... ,列N] fro ...
- Oracle 中 Start With 关键字
Start With (树查询) 基本语法如下: SELECT ... FROM + 表名 WHERE + 条件3 START WITH + 条件1 CONNECT BY PRIOR + 条件2 -- ...
- Oracle中如何用SQL检测字段是否包括中文字符
用Oracle的编码转换的函数Convert实现,测试后可行. SQL> select * 2 from (select 'abcd' c1 from dual 3 ...
- Oracle中转义下划线
原意是查询出所有的月粒度模型,但是在oracle中,下划线也代表匹配单一任何字符,导致15分钟粒度的模型也被查询出来,在此,需要对下划线做转义,使其只表示下划线的含义,可以使用ESCAPE()函数. ...
- Oracle中的特殊判式
Oracle中的特殊判式 除了逻辑运算之外,Oracle提供了一些特殊判式.这些判式可以用来生成更加复杂和灵活的查询条件.本节将着重介绍以下几种判式. Between: 取值范围 In: 集合成员测试 ...
- oracle中的控制语句
一.条件语句1.流程控制-if else(1)ifif 判断条件 then ...end if;(2)if-elseif 判断条件 then ...else ...end ...
- ORACLE中ESCAPE关键字用法
ESCAPE用法 1.使用 ESCAPE 关键字定义转义符: 在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符. 2.ESCAPE 'escape_character' 允许在字符串中搜 ...
- 下划线“_”在oracle中不是单纯的表示下划线的意思,而是表示匹配单一任何字符!
[解决办法]1.使用 escape() 函数escape关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原来的字符的意义,被定义的转义字符通常使用'\',但是也可以使用其他的符号.例如 ...
随机推荐- 数位DP
题意:(hdu 4734) 我们定义十进制数x的权值为f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+...a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字. 题目 ...
- android手机打电话代码分析
智能手机的打电话功能是由RIL部分来实现的,见下图: 开始分析Android源代码中的RIL部分. 又上图,以及其他相关资料,我得知在Android中有一个叫rild的守护进程.我猜测此进程与电话的拨 ...
- html5游戏引擎-Pharse.js学习笔记(一)
1.前言 前几天随着flappy bird这样的小游戏的火爆,使我这种也曾了解过html5技术的js业余爱好者也开始关注游戏开发.研究过两个个比较成熟的html5游戏引擎,感觉用引擎还是要方便一些.所 ...
- Windows Service 之 详解(一)
一.Windows 服务简介 Windows 服务是可以在系统启动时自动打开的(不需要任何人登录计算机)的程序. 1.适合创建Windows 服务的场景: [1] 在没有用户交互操作的情况下运行程序: ...
- jquery刷新iframe页面的方法
1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当 ...
- 算法回顾--N皇后问题简单回顾
前言 最近学习的过程中,不知道哪门子的思维发散,突然又遇见皇后问题了,于是乎老调重弹,心里琢磨,虽然思路大家都容易懂,哪怕是最简单的野蛮回溯法,说着简单,但是如果非得编码实现?我可以一次性写出来OK的 ...
- PageHelper补充
统计总数 Page<?> page = PageHelper.startPage(1,-1); long count = page.getTotal(); 分页 pageNum - 第N页 ...
- 【399】jupyter 修改主题
参考:Jupyter 主题更换 参考:Restoring default theme #86 修改主题的方法: 首先在 cmd 上输入 jt -l 选择自己需要的主题,如 jt -t monokai ...
- Spring MVC学习摘要
1. context:component-scan标签的use-default-filters属性的作用以及原理分析 http://www.cnblogs.com/hafiz/p/5875770.ht ...
- 【Selenium-WebDriver自学】WebDriver断言处理(十二)
断言使用 http://www.cnblogs.com/itliucheng/p/5578788.html http://blog.csdn.net/gzh0222/article/details/7 ...
http://blog.chinaunix.net/uid-26896647-id-3433968.html http://soft.chinabyte.com/database/398/124298 ...
1. SELECT 关键字用法: 检索单个列:select 列名 from 表名: 例:select ename from emp;检索多个列: select [列1,列2, ... ,列N] fro ...
Start With (树查询) 基本语法如下: SELECT ... FROM + 表名 WHERE + 条件3 START WITH + 条件1 CONNECT BY PRIOR + 条件2 -- ...
用Oracle的编码转换的函数Convert实现,测试后可行. SQL> select * 2 from (select 'abcd' c1 from dual 3 ...
原意是查询出所有的月粒度模型,但是在oracle中,下划线也代表匹配单一任何字符,导致15分钟粒度的模型也被查询出来,在此,需要对下划线做转义,使其只表示下划线的含义,可以使用ESCAPE()函数. ...
Oracle中的特殊判式 除了逻辑运算之外,Oracle提供了一些特殊判式.这些判式可以用来生成更加复杂和灵活的查询条件.本节将着重介绍以下几种判式. Between: 取值范围 In: 集合成员测试 ...
一.条件语句1.流程控制-if else(1)ifif 判断条件 then ...end if;(2)if-elseif 判断条件 then ...else ...end ...
ESCAPE用法 1.使用 ESCAPE 关键字定义转义符: 在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符. 2.ESCAPE 'escape_character' 允许在字符串中搜 ...
[解决办法]1.使用 escape() 函数escape关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原来的字符的意义,被定义的转义字符通常使用'\',但是也可以使用其他的符号.例如 ...
- 数位DP
题意:(hdu 4734) 我们定义十进制数x的权值为f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+...a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字. 题目 ...
- android手机打电话代码分析
智能手机的打电话功能是由RIL部分来实现的,见下图: 开始分析Android源代码中的RIL部分. 又上图,以及其他相关资料,我得知在Android中有一个叫rild的守护进程.我猜测此进程与电话的拨 ...
- html5游戏引擎-Pharse.js学习笔记(一)
1.前言 前几天随着flappy bird这样的小游戏的火爆,使我这种也曾了解过html5技术的js业余爱好者也开始关注游戏开发.研究过两个个比较成熟的html5游戏引擎,感觉用引擎还是要方便一些.所 ...
- Windows Service 之 详解(一)
一.Windows 服务简介 Windows 服务是可以在系统启动时自动打开的(不需要任何人登录计算机)的程序. 1.适合创建Windows 服务的场景: [1] 在没有用户交互操作的情况下运行程序: ...
- jquery刷新iframe页面的方法
1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当 ...
- 算法回顾--N皇后问题简单回顾
前言 最近学习的过程中,不知道哪门子的思维发散,突然又遇见皇后问题了,于是乎老调重弹,心里琢磨,虽然思路大家都容易懂,哪怕是最简单的野蛮回溯法,说着简单,但是如果非得编码实现?我可以一次性写出来OK的 ...
- PageHelper补充
统计总数 Page<?> page = PageHelper.startPage(1,-1); long count = page.getTotal(); 分页 pageNum - 第N页 ...
- 【399】jupyter 修改主题
参考:Jupyter 主题更换 参考:Restoring default theme #86 修改主题的方法: 首先在 cmd 上输入 jt -l 选择自己需要的主题,如 jt -t monokai ...
- Spring MVC学习摘要
1. context:component-scan标签的use-default-filters属性的作用以及原理分析 http://www.cnblogs.com/hafiz/p/5875770.ht ...
- 【Selenium-WebDriver自学】WebDriver断言处理(十二)
断言使用 http://www.cnblogs.com/itliucheng/p/5578788.html http://blog.csdn.net/gzh0222/article/details/7 ...