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