Oracle 支持 单引号和双引号,但两者存在区别。
一、双引号的作用:关键字,对象名、字段名、别名加双引号,则指示 Oracle将严格区分大小写,否则Oracl都默认大写。
1.1、双引号引住关键字
select sysdate from dual; -->2019/1/23 11:33:00
select “sysdate” from dual; -->ORA-00911: invalid character
如下则不会输出时间,只会输出sysdate这个字符串。
select ‘sysdate’ from dual; -->sysdate
1.2、双引号引住字段名
select * from emp where ENAME = 'ALLEN'; -->ok
select * from emp where “ENAME” = 'ALLEN'; -->ok
因为双引号提示oracle严格区分大小写,如下则不行
select * from emp where “ename” = 'ALLEN'; -->error
1.3、别名可以不用任何引号,但是比较特殊的别名必须用双引号,例如“a b”中间有特殊字符的;
1)一般来说,字符串中双引号仅仅被当做一个普通字符进行处理。
此时,双引号不需要成对出现:
SQL> select 'hh24"小时""mi""分"""ss"秒"' results from dual;RESULTS ------------------------- hh24"小时""mi""分"""ss"秒"
2)当出现在to_char的格式字符串中时,双引号有特殊的作用,就是将非法的格式符包装起来,避免出现ORA-01821: date format not recognized错误。
to_char在处理格式字符串时,会忽略双引号。
SQL> select to_char(sysdate,'hh24"小时"mi"分"ss"秒"') results from dual;RESULTS -------------- 06小时39分51秒
格式串为'hh24"小时"mi"分"ss"秒"';
去掉双引号部分后,剩下的是'hh24miss',是一个合法的格式串。
不过即使真不知道双引号的这个用法,也可以这样来处理,虽然麻烦一点:
select to_char(sysdate, 'hh24') || '小时' ||to_char(sysdate, 'mi') || '分' || to_char(sysdate, 'ss') || '秒' AS RESULT from dual; RESULT -------------- 06小时40分18秒
SELECT * FROM users WHERE id="F7119E4462E04303A7737AAB7B7E2917";-->报错:ORA-00972: identifier is too long。还是非法格式? SELECT * FROM users WHERE id='F7119E4462E04303A7737AAB7B7E2917';
二、单引号在 Oracle 中有三种作用
2.1、引用一个字符串常量,也就是界定一个字符串的开始和结束。 -->字符串是由单引号引用
例子:
select * from table_name where id=1123; 表示查询的是数字
select * from table_name where id=’1123’; 表示查询的是字符。当指定字符串文本时,必需用单引号将字符串文本引住。
2.2、转义符,对紧随其后出现的字符(单引号)进行转义
2.2.1、从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。
SQL> select '''' result from dual; RESULT ------ '
2.2.2、连接符‘||’导致了新一轮的转义
连接符号‘||’左右的单引号没有任何的关系,除非‘||’是作为字符串的一部分(这在动态SQL中很常见)。
理解:||后面的作为一个字符串,即前后是',中间又是一个密集型单引号串'',因此第一个为转义功能。
SQL> select 'name'||'''' result from dual;RESULT ------ name'
第一个和最后一个单引号作为字符串引用符,中间四个单引号两两转义。
SQL> select 'name''''' result from dual; RESULT ------ name''