度量快速开发平台-专业、快速的软件定制快开平台
标题: 转义字符 & 特殊运算符 [打印本页]
作者: fteair 时间: 2020-4-25 14:46
标题: 转义字符 & 特殊运算符
常见 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 等):字符类型自动转换为数值类型或日期类型。
作者: fteair 时间: 2020-4-25 14:49
有文有例,通俗易懂
作者: caixuqad 时间: 2020-4-25 17:07
作者: fteair 时间: 2020-4-26 14:38
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) |
Powered by Discuz! X3.2 |