一、通配符

通配符描述示例

%:匹配包含零个或更多字符的任意字符串。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 模糊查询 逗号_Oracle--通配符、Escape转义字符、模糊查询语句相关推荐

  1. oracle 模糊查询 逗号_Oracle模糊查询的实现

    Oracle模糊查询应该如何实现呢?下面就教您一个实现Oracle模糊查询的方法,如果您在Oracle模糊查询方面遇到问题,不妨一看. 在Where子句中,可以对datetime.char.varch ...

  2. oracle数据库查表_oracle数据库之多表查询二

    多表查询解题思路: 1.分析题目要查询的结果涉及到那几张表 2.将每张表建立关联条件,否则会产生笛卡尔积 3.分清楚查询的条件,然后使用and将条件链接 4.涉及到分组查询的需要使用聚合函数 5.分组 ...

  3. oracle表连接查询逗号隔开_Oracle多表连接查询

    连接:将一张表中的行按照某种条件和另一张表中的行连接起来形成一个新行的的过程. 根据连接查询返回的结果,分为3类: 内连接(inner join) 外连接(outer join) 交叉连接(cross ...

  4. oracle 字段以逗号结尾的更新 数据库_Oracle数据库某个字段的值为逗号分隔的多个值组成的字符串,以一个多选的下拉框进行查询...

    某个字段的值为逗号分隔的多个值组成的字符串,现在需要通过一个可以多选的下拉框进行条件查询. 首先将该下拉框的值在后台获取后封装进一个String数组中,如; params.put("syst ...

  5. mysql通配符escape使用_详解MySQL like如何查询包含'%'的字段(ESCAPE用法)

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  6. mysql通配符escape使用_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)-MySQL教程-Web开发者网...

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  7. oracle模糊查询很慢,采用全文索引解决模糊查询速度慢的问题

    众所周知,使用 like 进行模糊查询速度极差,包括 like 'AAA%' ,like '%AAA',like '%AAA%',like '%A%A%'以及采用"_"进行单字符匹 ...

  8. Oracle模糊查询之(2.如何测试模糊查询的时间及使用是否使用索引)反向索引与模糊查询

    反向索引与模糊查询 反向索引应用于前模糊的用法简介: 1.反向索引 SQL> create index ind_name on atest reverse(name); SQL>  sel ...

  9. oracle多条件分组查询数量_ORACLE分组查询和统计等

    select flow_id,rw from (select t.flow_id ,rownum as rw from apex_030200.wwv_flow_list_templates t)  ...

最新文章

  1. 阿里二面:GET 请求能传图片吗?
  2. pyqt5获取屏幕大小并将窗口大小设置为屏幕的百分之六十
  3. android显示3d模型_使用Unity AR Foundation在增强现实中查看模型
  4. 玩够了没,开始奋斗吧?
  5. Javascript实现的2048
  6. POJ 2299Ultra-QuickSort
  7. python大神的程序_6年Python大神总结10个开发技巧,80%的人都不会
  8. Oracle数据同步接口,增量数据从ERP系统到本地临时表封装解决方案
  9. LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
  10. 对其他小组作评的评价
  11. 13/18V系列中频切换开关原理及应用方式
  12. Facebook被封锁后如何申请解除
  13. JavaScript 实现页面内时间实时倒计时 计时器内附完整文件欢迎调用(可用于抢购倒计时,记录恋爱纪念日总时长等)输出对应的天数小时分钟秒数
  14. 讲座记录《多种空间大地测量技术的数据处理方法和应用》
  15. 用c语言编写编码菲诺,大C论表:MKS柏涛菲诺150周年纪念款带来哪些升级
  16. 成考计算机科学与技术考试科目,计算机科学与技术本科自考有哪些科目
  17. 以计算机专业为主的活动,院系宣传 | 计算机科学与技术系:以梦为码
  18. [ARM+Linux] 基于全志h616外设开发笔记
  19. 考微软认证 MCAD for C#
  20. 大数据精准投放+优质内容营销 帮你找到用户更能留住用户!

热门文章

  1. 防止页面刷新过多js_JavaScript多种页面刷新方法小结
  2. patran如何看屈曲因子_patrannastran问题集锦
  3. ExtPlayer-Adobe AIR ExtJS 共同开发的MP3 播放器
  4. 制作winpe,linux,maxdos三合一u盘启动盘,制作winPE、Linux、maxdos三合一U盘启动盘
  5. 中考英语听说计算机考试是什么,终于等到!中考英语听说机考在线体验系统开通~...
  6. 【PL/SQL】连接PLSQL
  7. 【xdoj难题集】 1059: 英雄联盟
  8. python注意数组赋值的特殊含义
  9. PDF编辑软件Movavi PDFChef 2021 Mac
  10. 简述JavaScript运算符