在mysql中,单双引号除了在相互包含对方的情况下,基本上没什么区别!
Oracle中,单双引号则是区别明显
1.一般情况下都是使用单引号
- SQL> select 'aa' from dual;
- 'AA'
- ----
- aa
- SQL> select 'aa"' from dual;
- 'AA"'
- ------
- aa"
- SQL> select "aa" from dual;
- select "aa" from dual
- *
- 第 1 行出现错误:
- ORA-00904: "aa": 标识符无效
双引号不能用于普通情况下,但是可以被包含在字符串中!现在有个问题,如果我在字符中包含了单引号,那我该怎么做?mysql是用双引号引上!Oracle是除了最外面的两个引号外,全部double一次,就是以变二了!看几个例子:
- SQL> select 'aa''' from dual;
- 'AA'''
- ------
- aa'
- #去掉最外面两个单引号,变成a'',在里面的单引号都是一变为二的,所以a''就是a'
- SQL> select 'a''''' from dual;
- 'A''''
- ------
- a''
- #同理去掉最外面的两个单引号a'''',根据一变为二原则,a''就是a''''
- SQL> select 'a''b''''c''''''' from dual;
- 'A''B''''C'''''''
- ------------------
- a'b''c'''
- 同理
那么,现在又有一个问题了!如果去掉最外层的两个单引号,被引上的字符串中单引号数量为单数,会发生什么情况?
- SQL> select 'a'';
- ERROR:
- ORA-01756: 引号内的字符串没有正确结束
- SQL> select 'a'''';
- ERROR:
- ORA-01756: 引号内的字符串没有正确结束
- #提示很明显了!字符串没有正确结束
当然,用引号翻倍的方法只是用于引号不多的情况,如果字符串中引号繁多,一个个进行翻倍比较麻烦,Oracle提供了前缀引的方法
- SQL> select Q'{asdf}' from dual;
- Q'{ASDF}
- --------
- asdf
- SQL> select q'{aren't you?}' from dual;
- Q'{AREN'TYOU?}'
- ----------------------
- aren't you?
- #使用q/Q前缀关键字 加上对单引号,在引号里面包含一堆括号(大、中、小都可以)
- #括号里面就是需要被引上的内容
2.双引号用于引别名或者Oracle内定关键字
看一下它的几个用法
- SQL> select 'hello' 1 from dual;
- select 'hello' 1 from dual
- *
- 第 1 行出现错误:
- ORA-00923: 未找到要求的 FROM 关键字
- #如果列值想以数字开头
- SQL> select 'hello' "1" from dual;
- 1
- ----------
- hello
- #使用双引号吧,双引号可以打破oracle对命名的限制
- SQL> select 'hello' world from dual;
- WORLD
- ----------
- hello
- SQL> select 'hello' 'world' from dual;
- select 'hello' 'world' from dual
- *
- 第 1 行出现错误:
- ORA-00923: 未找到要求的 FROM 关键字
- #单引号不能引列名
- SQL> select 'hello' "world" from dual;
- world
- ----------
- hello
- #这样的任务交给双引号吧