单引号在 Oracle 中有三种身份:
- 用来引用一个字符串常量,也就是界定一个字符串的开始和结束
- 转义符,对紧随其后出现的字符(单引号)进行转义
- 表示它本身,也就是它作为一个字符串的一部分而出现在一个字符串常量中
当具有不同身份的单引号紧挨着一起出现在 sql 语句中时常常令人迷惑不解,下面将以自己总结出来的经验为基础,结合具体实例来说明每个单引号的含义。
总结经验:
- 出现在表达式开头和结尾的这两个单引号的含义肯定是表示引用一个字符串,界定字符串的开始和结束
- 如果单引号出现在表达式中间(即非表达式开头和结尾的单引号),且多个单引号之间没有任何其他字符,那么当我们从左向右分析时,第一对单引号中的第一个是转义符,它对紧随其后的第二个单引号进行转义,以使第二个单引号作为一个字符出现在一个字符串常量中。第二队,第三队,以此类推……
下面用实例来验证自己的经验总结:
示例一:1
select '''' from dual; --查询结果:'
分析:表达式 ‘’’’ 中第1、4个单引号表示引用一个字符串常量,表达式的剩余部分我们从左往右分析,由于中间是一对单引号,故此对中的第一个是转义符,其对第二个进行转义,使第二个表示单引号本身。分析得出这里有一个字符串常量,其中只有一个单引号字符。s
示例二:1
select 'exit''''' from dual --查询结果:exit''
分析:表达式 ‘exit’’’’’ 中第一个和最后一个单引号表示引用一个字符串常量,表达式的剩余部分我们依然从左往右分析。剩余部分中,遇到的第一个单引号后面紧随一个单引号,我们将其作为一对,根据示例一,这一对的解析结果为一个单引号字符本身;然后继续向右走,又遇到一对紧挨着的单引号,同理,他们的解析结果也是一个单引号字符本身。分析得出这里的字符串常量包含exit和两个单引号字符。