一、通配符
通配符描述示例
      %:匹配包含零个或更多字符的任意字符串。WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。
      _(下划线):匹配任何单个字符。WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
      [ ]:指定范围 ,([a-f]) 或集合 ([abcdef]) 中的任何单个字符。WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。
      [^]:不属于指定范围, ([a-f]) 或集合 ([abcdef]) 的任何单个字符。WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。

1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。

二、Escape 转义字符
用户输入如果没有任何限制的话,则必须对特殊字符进行变换。
例如:如果对单引号不进行变换,则会发生数据库错误,甚至可能导致系统崩溃。
不过回避方法却非常简单,只要将单引号[']转换成两个单引号['']就可以了。
 
例:SELECT * FROM TBL WHERE COL = 'ABC''DEF';
 模糊查询的语句虽然不会发生SQL错误,但是不进行回避的话,则无法得到要检索的值。
 回避方法较单引号复杂。需要使用转义符。将[%]转为[/%]、[_]转为[/_],然后再加上[ESCAPE '/']就可以了。
    例:SELECT * FROM TBL WHERE COL LIKE 'ABC/%/_%' ESCAPE '/';
  ※最后一个%是通配符。
 
如果做日文项目的话,会出现全角字符的[%]、[_],而这两个全角字符同样会作为半角通配符处理。所以在变换时,同时需要将全角的[%]、[_]进行变换。
例:SELECT * FROM TBL WHERE COL LIKE 'ABC/%/_/%/_%' ESCAPE '/';
变换成这样似乎结束了,可是不要忘了还有转义符自身,万一用户输入转义符的话,
以上的处理就会发生SQL错误。所以也必须对转义符进行变换。变换方法就是将[/]转换为[//]。
例:SELECT * FROM TBL WHERE COL LIKE 'ABC/%/_/%///_%' ESCAPE '/';
以上的操作都针对于一般的数据类型,如CHAR、VARCHAR2。
 如果出现NCHAR、NVARCHAR2的话,以上的处理就会出现ORA-01425错误。
 
如果改成以下写法,则会发生ORA-01424错误。
    SELECT * FROM TBL WHERE COL LIKE '%/_%' ESCAPE TO_NCHAR('/')
正确的写法应该是
    SELECT * FROM TBL WHERE COL LIKEC '%/_%' ESCAPE TO_NCHAR('/')

三、模糊查询语句
CREATE TABLE testsql (test_data VARCHAR2(15) NOT NULL);
SELECT * FROM testsql ;

其中包含特殊的字符分别为%,_,&,有可能包含这些字符的数据含有错误,或者需要查找包含这些字符的数据。
例1、4种模糊查询查下划线
1、SQL> SELECT * FROM testsql WHERE test_data LIKE 'sdd_%' ESCAPE ' ';

其中: 转义字符为' '(空一格);
2、SQL> SELECT * FROM testsql WHERE test_data LIKE 'sdd/_%' ESCAPE '/';

其中:转义字符为'/';
3、SQL> SELECT * FROM testsql WHERE test_data LIKE 'sdd=_%' escape '=';

其中: 转义字符为'=';
4、SQL> SELECT * FROM testsql WHERE test_data LIKE 'sddd_%' escape 'd';
未选定行
        转义字符为d,没有实现转义功能;

同理:通过这种方法查找含有'%'的所有字段:
SQL> SELECT * FROM testsql WHERE test_data LIKE '%/%%' escape '/';

例2、 但是'&'不能通过转义字符查找:
SQL> SELECT * FROM testsql WHERE test_data LIKE '%/&%' escape'/';                             *

可以通过另外的方式进行转义:
SQL> SELECT ASCII('&') FROM dual;
 
SQL> SELECT * FROM testsql WHERE test_data LIKE '%'||chr(38)||'%';

oracle 使用“||”进行字符串连接

例3、 '的转义:
SQL> SELECT * FROM testsql WHERE test_data LIKE '%''%';

例4、特殊符号“&”的插入

方法一、SQL> INSERT INTO testInsert VALUES('test'||chr(38)||'');

方法二、SQL>INSERT INTO testInsert VALUES('Tom' || '&' || 'Jerry' )

例5、特殊符号单引号的插入

方法一、SQL>INSERT INTO testInsert VALUES('test' || '''' );

注意:这里的''''四个单引号是什么意思呢?首先第一个和最后一个都是Oracle中的字符串连接符,这个没有异议。那么第二个'和第三'又表示什么意思呢?第二个'是一个转义字符。第三个'才是我们真正的内容

方法二、SQL>INSERT INTO testInsert VALUES('test''' );

方法三、SQL>INSERT INTO testInsert VALUES('test'|| chr(39)||'');
---------------------
作者:liucw_cn
来源:CSDN
原文:https://blog.csdn.net/ochangwen/article/details/51159933
版权声明:本文为博主原创文章,转载请附上博文链接!

Oracle--通配符、Escape转义字符、模糊查询语句的更多相关文章

  1. Oracle SQL:select各类查询语句总结

    SQL查询语句总结 数据查询语言:即DML(Data Mannipulation Language)数据操纵语言,用于查询.操纵数据表资料行 本手册所有示例引用表均以TIPTOP GP  ERP数据库 ...

  2. 2019-2-14sql server数据库模糊查询语句

    sql server数据库模糊查询语句   确切匹配: select * from hs_user where ID=123 模糊查询 select * from hs_user where ID l ...

  3. Oracle学习笔记_07_模糊查询

    附录:参考资料 1.Oracle sql语言模糊查询--like后面的通配符 2.oracle sql语言模糊查询--通配符like的使用教程

  4. SSM框架mapper.xml模糊查询语句

    SSM框架mapper.xml模糊查询语句 在用SSM框架时,如果想要实现模糊查询,可以在mapper.xml文件中进行数据库语句的书写,方法有很多种,在这里我选择了两种介绍: 方法1: <se ...

  5. 详解Oracle的几种分页查询语句

    转载自:http://database.51cto.com/art/200904/118737.htm 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FRO ...

  6. Oracle:时间字段模糊查询

    需要查询某一天的数据,但是库里面存的是下图date类型 将Oracle中时间字段转化成字符串,然后进行字符串模糊查询 select * from CAINIAO_MONITOR_MSG t WHERE ...

  7. sql语句的各种模糊查询语句

    一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况 ...

  8. ORACLE EBS常用表及查询语句(最终整理版)

    建议去看参考二 参考一:                                                              call fnd_global.APPS_INITI ...

  9. Oracle系列四 单行函数查询语句

    单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数: ...

随机推荐

  1. 微信小程序是怎么运行的?

    微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地. 紧接着通过 app.json 的 pages 字段就可以知道你当前小程序的所有页面路径 而写在 pages 字段的第一个页面就是这个小程 ...

  2. Specified key was too long; max key length is 767 bytes解决方案

    问题描述: 1.  使用spark sql处理数据逻辑,逻辑处理后使用 df.write.mode(saveMode).jdbc(url, tableName, connectionPropertie ...

  3. Java——对象的复制、克隆、序列化

    原创作者: https://blog.csdn.net/lmb55/article/details/78277878对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; ...

  4. 【安全测试自学】初探web安全处测试(三)

    安全测试专家成长系列之-初探Web安全3.mp4 案例: 安全测试的前景: 总结讨论:

  5. Burp Suite设置代理

    一.确认代理信息 打开Burp Suite,查看proxy->options,看到Interface一栏为127.0.0.1:8080. 二.在Firefox中设置代理服务器 可以下载工具Fox ...

  6. Echarts属性大全(及时更新最新信息)

    echarts属性的设置(完整大全)   // 全图默认背景  // backgroundColor: ‘rgba(0,0,0,0)’, // 默认色板 color: ['#ff7f50','#87c ...

  7. 由2个鸡蛋从100层楼下落到HashMap的算法优化联想

    题目: 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层下落会摔破,在第N层以下的楼层不会摔破,给你两个鸡蛋,设计方案找出N,并且保证在最坏的情况下,最小化鸡蛋下落的次数.(鸡蛋没有摔破是可以重复利用 ...

  8. python大法好——Python XML解析

    Python XML解析 什么是XML? XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识. 它也是元标记语言,即定义了用于定义其他与 ...

  9. HBASE分布式集群搭建(ubuntu 16.04)

    1.hbase是依赖Hadoop运行的,因此先确保自己已搭建好Hadoop集群环境 没安装的可以参考这里:https://www.cnblogs.com/chaofan-/p/9740408.html ...

  10. [Tools] Wireshark Primer Tutorials

    介绍就不说了,安装也没必要讲,关于如何使用,网上的辣鸡文过多,视频又太冗余. 我推荐看下面有条理的入门教程. 界面说明:http://openmaniak.com/cn/wireshark_use.p ...