ORACLE通配符转义

简介: ORACLE通配符转义

参考如下小Demo

先建立如下VIEW

CREATE OR REPLACE VIEW V AS 
SELECT 'ABCEDF' As vname FRoM dual 
UNION ALL 
SELECT '_BCEFG' AS vname FROM dual 
UNION ALL 
SELECT '_BCEDF' As vname FRoM dual 
UNION ALL 
SELECT '_\BCEDF' AS vname FROM dual 
UNION ALL 
SELECT 'XYCEG' AS vname FROM dual;


要求:查出 vname中包含字符串“BCE”的。

SELECT * FROM V WHERE vname LIKE '_BCE%'



0.png


发现多了一个 ABCEDE。因为在LIKE子句中有两个通配符:

  • “%”(替代一个或多个字符)
  • “_”(替代一个或多个字符)

在这里,“_”被当作通配符了,怎么办呢?莫急,我们可以用转义字符:


SElECT * FROM V WHERE vname LIKE '\_BCE%' ESCAPE '\';


1.png


ESCAPE把"标识为转义字符,而'\'把'_'转义为字符,而非其原义(通配符)。

或许有人注意到其中有一行值为 _\BCEDF。那么加了 ESCAPE"后怎么返回这一行数据呢?


SELECT * FROM V WHERE vname LIKE '_\BCE%' ESCAPE '\';
--ORA-01424:转义符之后字符缺失或非法


看到没,会报错。熟悉开发的读者会想到什么?没错:双写转义字符即可。


SELECT * FROM V WHERE vname LIKE '_\\BCE%' ESCAPE '\';


对于字符串中包含“%”的情况,与上面的处理方法一样

相关文章
|
7月前
|
SQL Oracle 关系型数据库
Oracle之regexp系列函数详解
Oracle之regexp系列函数详解
571 1
|
Oracle 关系型数据库
|
Oracle 关系型数据库
oracle学习23-区分大小写和字符集不同
oracle学习23-区分大小写和字符集不同
119 0
|
Oracle 关系型数据库 机器学习/深度学习
|
机器学习/深度学习 Oracle 关系型数据库
[20170728]oracle保留字.txt
[20170728]oracle保留字.txt --//oracle有许多保留字,我印象最深的就是使用rman备份表空间test,test就是rman里面的保留字. --//还有rman也是rman里面的保留字.
851 0
|
Oracle 关系型数据库 数据库
|
Web App开发 关系型数据库
oracle 正则表达式2
SUBSTR的用法 SUBSTRB(STR,NUMBER,NUMBER) select t.str,substrb(t.str,2,1),substr(t.
741 0