1. 程式人生 > >oracle中關於單引號和雙引號的幾點注意

oracle中關於單引號和雙引號的幾點注意

雙引號的作用是:如果建立物件的時候,物件名、欄位名加雙引號,則表示Oracle將嚴格區分大小寫,否則Oracl都預設大寫;雙引號一般是用來轉義的,如果alias裡面有空格或其它保留符號,必須使用雙引號。

在ORACLE的SQL語句中如果要定義列的別名有兩種方式,要麼別名什麼引號都不加,要麼別名用雙引號修飾。但這兩種寫法有區別。如果別名什麼都不加,在查詢結果顯示的列名預設的都是大寫(如果別名是中文就保持不變,因為中文不區分大小寫),如果別名被雙引號修飾的話,在查詢結果顯示的列名按照雙引號內的大小寫來顯示,是大寫就顯示大寫,是小寫就顯示小寫。

而單引號則表示:這個加了單引號的欄位是一個字類似字串,並不區分大小寫;單引號是用來特製的,比如字串的引用,日期字串的引用,都必須包括在單引號中,可以參與運算或其它表示式中。


兩者不可混用,其中,兩個單引號可以作為單引號的轉義使用,意思就是一個真正的、沒有特殊功能的單引號。例如 select substr('I''am a pig',1,4)。

在SQL中,表示字串得引號強烈建議使用單引號(')。雖然MySQL也可以使用雙引號("),但是為了和SQL Server和Oracle統一,建議都使用單引號。如果在字串中也有單引號出現的話,在SQL中需要將其替換為兩個單引號(''),DBMS會將其解釋為一個單引號的。
關於SQL的換行符和字串連線符,在MySQL、SQL Server和Oracle中均有不同,下面以列表顯示。

MySQL SQL Server Oracle
換行符 /n或/r/n或CHAR(10) CHAR(13) CHR(10)
字串連線符 CONCAT() + ||或CONCAT()

單引號用於標識字元與數字的區別
例如
select * from table_name where id=1;這種代表查詢的是數字
select * from table_name where id='1';這種代表查詢的是字元

如果是雙引號是這樣,假如你有個表的欄位叫sysdate,因為sysdate屬於oracle中的特有字元,但你要查詢這個欄位的時候
select "sysdate" from table_name;
但是你要是用
select 'sysdate' from table_name;
那麼你查出來的就是字串,結果是sysdate。

PL/SQL中處理單引號

用兩個連續的單引號可以轉義成一個單引號字元
例:
declare
vc_name varchar2(100) :='shikai';
vc_str varchar2(100) ;
begin
dbms_output.put_line('hello, ' || 'shikai'); --輸出hello, shikai
dbms_output.put_line('hello, ' || vc_name); --輸出hello, shikai
dbms_output.put_line('hello, ' || '''shikai'''); --輸出hello, 'shikai'
dbms_output.put_line('hello, ''' || 'shikai'||''''); --輸出hello, 'shikai'
dbms_output.put_line('hello, ''' || vc_name||''''); --輸出hello, 'shikai'
end;

在PL/SQL語句中如何將單引號作為一個字元賦給一個字元變數

declare
w_str varchar2(10);
begin
w_str := '''';
eng;

用兩個''表示

select '''e''' from dual
  返回'e',先判斷最外層的兩個單引號,確定為字串,然後內層的兩個單引號,轉義表示一個單引號,所以就成了'e'。
  -----------------------------------
  select '''' from dual
  返回',先判斷最外層的兩個單引號,確定為字串,然後內層的兩個單引號,轉義表示一個單引號,所以就返回了一個'。
  -----------------------------------
  select ''''||'e'||'''' from dual
  返回'e',中間存在兩個連線符,前後四個單引號各返回一個單引號,然後與中間的e相連線成為'e'。