度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 725|回复: 3
打印 上一主题 下一主题

[分享] 转义字符 & 特殊运算符

[复制链接]

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
跳转到指定楼层
楼主
发表于 2020-4-25 14:46:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
常见 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(注意这个列名是小写的)----------        21
And:默认情况下,如果字段中包含&符号就无法正常执行了。例如在 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 等):字符类型自动转换为数值类型或日期类型。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
沙发
 楼主| 发表于 2020-4-25 14:49:28 | 只看该作者
有文有例,通俗易懂
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
板凳
发表于 2020-4-25 17:07:55 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
地板
 楼主| 发表于 2020-4-26 14:38:58 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-9-29 08:12 , Processed in 0.127728 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表