Oracle--通配符、Escape转义字符、模糊查询语句

一、通配符

通配符描述示例

%:匹配包含零个或更多字符的任意字符串。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)||‘‘);

时间: 2024-11-04 21:03:00

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

SQL模糊查询语句

SQL模糊查询语句: SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下: 1.LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden). 2.LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer.Stringer). 3.LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet.Green.McBadden). 4.LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称

Oracle学习笔记_07_模糊查询

附录:参考资料 1.Oracle sql语言模糊查询--like后面的通配符 2.oracle sql语言模糊查询--通配符like的使用教程 原文地址:https://www.cnblogs.com/shirui/p/8145178.html

oracle新建用户执行sql查询语句出现错误ORA-00942:表或视图不存在

oracle创建新用户后客户端执行SQL查询后出现错误提示如下: 执行查询语句如下: select * from sm_sales_order; ORA-00942:表或视图不存在 创建新用户并指定表空间和临时表空间 CREATE USER xxx IDENTIFIED BY xxxx DEFAULT TABLESPACE LMS TEMPORARY TABLESPACE TEMP; 授予系统权限connect grant connect to xxx; 授予对象权限,只限查询 grant se

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

分页查询格式: SELECT * FROM  ( SELECT A.*, ROWNUM RN  FROM (SELECT * FROM TABLE_NAME) A  WHERE ROWNUM <= 40 ) WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句.ROWNUM <= 40和RN >= 21控制分页查询的每页的范围. 上面给出的这个分页查询语句,在大多数情况拥有较高的效率.分页的目的就是控制输出结果集

数据库-Oracle通过执行计划查看查询语句是否使用索引【转】

1.生成执行计划 explain plan for select * from t_call_records where t_bjhm='123456' 备注:explain plan for后面为要生成执行计划的查询语句 2.查看执行计划结果 select * from table(dbms_xplan.display) 如上图所示,TABLE ACCESS FULL为全表扫描; 为t_bjhm列加上索引后生成执行计划并查看结果: 如上图所示,index range scan为索引范围扫描;

Oracle数据库关于命中率的查询语句总结

1) Library Cache的命中率 公式:Library Cache Hit Ratio=SUM(PINHITS)/SUM(PINS) SELECT SUM(PINHITS)/SUM(PINS) FROM V$LIBRARYCACHE; 命中率不能低于99%,否则需要考虑是否受共享池大小,绑定变量,cursor_sharing等因素的影响. SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME='cursor_sharing' 2) Shared Po

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

单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数:这类函数改变字符的大小写. LOWER('SQL Course') sql course UPPER('SQL Course') SQL COURSE INITCAP('SQL Course') Sql Course 示例: SELECT employee_id, last_name, depart

Mybatis,模糊查询语句,以及传参数的正确写法

不多说直接上代码! 接口: public interface CommodityMapper { int deleteByPrimaryKey(Integer productId); int insert(Commodity record); Commodity selectByPrimaryKey(Integer productId); List<Commodity> selectAll(); List<Commodity> getType(int id); int update

Oracle 模糊查询方法

在这个信息量剧增的时代,如何帮助用户从海量数据中检索到想要的数据,模糊查询是必不可少的.那么在Oracle中模糊查询是如何实现的呢? 一.我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果:在Where子句中,可以对datetime.char.varchar字段类型的列用Like关键字配合通配符来实现模糊查询,以下是可使用的通配符: (1)% :零或者多个字符,使用%有三种情况 字段 like '%关键字%'字段包含"关键字"的记录 字段 like '关键字%