常见 Oracle 转义字符一览表 序号字符名称功能类型
1%百分号在 WHERE 子句中表示 0 或多个任意字符通配符
2_下划线在 WHERE 子句中表示一个任意字符通配符
3'单引号表示文本、字符和日期定界符
4"双引号包裹非法字符串或让列名严格区分大小写定界符
5&And用来指出一个替代变量特殊符号
6*星号在 SELECT 语句中表示 0 或多个列特殊符号
7‖双竖线连接字符串特殊符号
8/正斜线终止 SQL 语句特殊符号部分转义字符的特殊用法解析 下划线:如果 LIKE 后的模式字符串是'_%',那么查询结果将会是所有非空的数据,只匹配下划线开头的数据的正确写法是'/_%' ESCAPE '/'。示例(查询以A_开头的数据): WITH t AS( SELECT 'AB' f FROM DUAL UNION ALL SELECT 'A_' FROM DUAL UNION ALL SELECT 'A_B' FROM DUAL)SELECT t.f res FROM t WHERE t.f LIKE 'A/_%' ESCAPE '/';单引号:要在字符串中包含单引号是比较繁琐的,基本思路就是拼接。示例: SELECT '''' res FROM DUAL; -- res: 'SELECT '''''' res FROM DUAL; -- res: ''SELECT '''1''' res FROM DUAL; -- res: '1'SELECT ''''||'1'||'''' res FROM DUAL; -- res: '1'双引号:在 Oracle 中双引号主要用于处理非法格式和强制大小写。 示例一(处理非法日期格式): SELECT TO_CHAR(fn_now,'yyyy年mm月dd日') res FROM DUAL; -- ORA-01821: 日期格式无法识别SELECT TO_CHAR(fn_now,'yyyy"年"mm"月"dd"日"') res FROM DUAL; -- res: 2017年01月10日示例二(处理非法列名): SQL> SELECT 3*7 "RES VAL" FROM DUAL;RES VAL(注意这个列名包含空格)---------- 21示例三(强制列名小写): SQL> SELECT 3*7 "res" FROM DUAL; res(注意这个列名是小写的)---------- 21And:默认情况下,如果字段中包含&符号就无法正常执行了。例如在 PL/SQL Developer 中执行SELECT 'AB&CD' res FROM DUAL;时就会被要求提供CD变量的值,假如你提供一个 1,那查询结果就会是 AB1。如果想要正常查询出含&符号的数据该怎么办呢? 如果是在命令窗口,如下执行即可: SQL> SET DEFINE OFF;SQL> SELECT 'AB&CD' res FROM DUAL;RES-----AB&CD如果是 PL/SQL 中,就得写成: SELECT 'AB'||'&'||'CD' res FROM DUAL; -- 大概单个 & 符号的时候 Oracle 就不再认为它是转义字符了吧-- 或SELECT 'AB'||CHR(38)||'CD' res FROM DUAL; -- 38 是 & 的 ASCII 码Oracle 中的几个特殊运算符解析 冒号(:在 PL/SQL 程序中,冒号是很常见的,冒号主要有两个作用,分别用于给变量赋值和引用(变量或字段)。如v_name := 'scott'表示给v_name变量赋值为'scott',:NEW.staff_name表示引用表中的staff_name字段。 等于号大于号(=>):在 PL/SQL 程序中调用存储过程的时候,可通过=>符号来指定要给存储过程中的那些参数赋值。 双竖线(||):可能你会说这个符号我太熟了,不就是用来拼接字符串嘛!但在通过双竖线进行连接运算的时候,往往还伴随着隐式数据类型转换,你是否关注到了呢? 以下是进行 SQL 运算时隐式类型转换的一般规则: - 连接运算(||、CONCAT):数值类型和日期类型自动转换为字符类型。
- 算数运算(+、-、*、/、TRUNC 等):字符类型自动转换为数值类型或日期类型。
- 比较运算(>、<、=、IF、WHEN 等):字符类型自动转换为数值类型或日期类型。
|