-zhuang

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\'\'

 

分类:

技术点:

相关文章:

  • 2021-12-31
  • 2022-02-09
  • 2021-12-31
  • 2021-11-04
  • 2022-12-23
  • 2022-01-24
  • 2022-02-01
  • 2021-12-31
猜你喜欢
  • 2021-12-31
  • 2021-12-31
  • 2021-12-31
  • 2021-12-21
  • 2021-09-16
  • 2021-12-31
相关资源
相似解决方案