oracle中單雙引號的區別、轉義字符及引申


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM