Oracle单引号和双引号
在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
[*]#这样的任务交给双引号吧
页:
[1]