瞭解 Oracle 中單引號與雙引號的用法,一篇文章教會你!
無論測試或者開發,對資料庫的增刪改查都是家常便飯。但有些小知識是經常被忽略,卻又不能不去了解的,例如單引號和雙引號的用法和區別,看完這一篇,你肯定會有收穫。 進入》
首先我們要區別一個概念,即單引號(‘)和雙引號(“)和兩個單引號(‘’),在PL/SQL中明顯是不同的,單引號就是單引號,雙引號就是雙引號。那麼我們來看下單引號和雙引號在Oracle的世界中有什麼區別。
Oracle中的單引號
在Oracle中,單引號主要有兩種用途:
一是引用字串
二是轉義
讓我們直接從問題出發,反向論證。
Q1 如何列印出單引號?
我們知道單引號經常用來標識內容為字串(引用),但是怎麼來標識自己呢?如果直接這樣寫,那麼就會報錯。
select ''' from dual;
> ORA-01756: 引號內的字串沒有正確結束
因此,這邊用到了單引號的轉義用法,即用單引號轉義自己:’’
沒錯,就是寫成兩個單引號,轉義類似語言中的反斜槓(\),下面SQL中的綠色部分就是轉義的位置。
select''''fromdual;
Q2如果轉義單引號和字串的引號連續,如何選擇優先順序?
如果跳脫字元前後還有字串,那麼該怎麼判斷其優先順序呢,是先表示字串的,還是先轉義。
select'name''is'fromdual;
例如上面這個SQL,兩個字串連在一起,那麼是輸出拼接後的nameis還是 name’is?其實這邊看似兩個字串,其實中間的兩個單引號是轉義,所以結果是 name’is. select'name''is'fromdual;#中間引號為轉義的單引號
那有沒有連續轉義的場景呢,例如下面這個sql,就是連續轉義。
select'name'''''fromdual;
如上,sql中進行了連續兩個轉義,因此結果是name''
Q3單引號遇到||拼接還可以繼續轉義嗎?
我們都知道,在sql語句中,如果想要多個欄位拼接,可以用雙豎線||來實現。而||兩邊的字串是沒有任何關聯的,互不干擾,即使是跳脫字元也是一樣的,可以看到下面這個例子。
select'I'||''''||'amJack'fromdual;
語句中由兩個||將字串分成了3部分,且每段都是互相獨立的。那麼中間4個單引號是如何顯示的?其實是中間兩個單引號是轉義,前後兩個單引號只是字串的引用而已(4個單引號只為了顯示1個單引號),因此結果就是:I'amJack
Q4單引號的轉義太複雜,易混亂,有沒有簡單的標識方法?
對於簡單的sql語句中含有個別單引號還可以接受,但是如果sql語句中包含大量的單引號,豈不是很混亂,要崩潰?
select'insertintobp_data_router(ACCESS_TYPE,ACCESS_CODE,BE_ID,EFF_DATE,CUST_ID_PREFIX,EXP_DATE,STATUS,CUST_ID)values('||''||t.access_type||','''||t.access_code||''','||t.be_id||',to_date('''||to_char(t.eff_date,'yyyymmddhh24miss')||''','||'''yyyymmddhh24miss''),'||t.cust_id_prefix||','||'to_date('''||to_char(t.exp_date,'yyyymmddhh24miss')||''','||'''yyyymmddhh24miss''),'''||t.status||''','||t.cust_id||');'frombp_data_routertwhereto_char(t.eff_date,'yyyymmddhh24miss')>'20170119004300'andt.eff_date<sysdate
對於類似複雜場景,為了避免出錯,建議使用ASCII碼來表示:chr(39)
selectchr(39)fromdual;#’
Oracle中的雙引號
一般來說,雙引號沒有單引號那麼複雜,它就是一個普通的字元。
select'"'fromdual;
但是,當出現在to_char的格式字串中時,雙引號有特殊的作用,就是將非法的格式符包裝起來,避免出現ORA-01821:dateformatnotrecognized錯誤。?也就是說,去掉雙引號和其包含的字元後,剩下的應該是一個合法的格式串。此時,to_char在處理格式字串時,會忽略雙引號。
selectto_char(sysdate,'hh24"小時"mi"分"ss"秒"')resultsfromdual;
如上這個寫法,“小時”這部分是不能帶入到語言內部運算的,程式會預設忽略這部分字元,但是輸出的時候,又把它們加上,這就是雙引號的作用。
#忽略之後執行這樣的語句:
selectto_char(sysdate,'hh24miss')resultsfromdual;
#輸出結果再加上雙引號的格式:
>>22小時50分59秒
總結:
綜上所述,Oracle中的單引號可以充當跳脫字元,且優先順序較高,而雙引號只是個普通字元,只有在to_char中才能發揮特別作用。
最後:
可以到我的個人V:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的影片學習教程免費分享!其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試高階持續整合、測試架構開發測試框架、效能測試等。
這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2929516/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中單引號和雙引號的區別Oracle
- Golang的單引號、雙引號與反引號Golang
- HTML 單引號與雙引號HTML
- linux bash中的引號:單雙引號、反撇號Linux
- oracle資料庫--Oracle雙引號和單引號的區別小結Oracle資料庫
- Linux Shell 單引號 雙引號 使用區別Linux
- 【C進階】14、單引號和雙引號
- shell中定義變數用雙引號和單引號以及不用引號的區別變數
- PHP中引號的用法PHP
- awk 技巧之輸出單引號和雙引號
- Linux中單引號和雙引號的使用方法及注意事項!Linux
- latex的雙引號 ``'
- 【轉】cmd中%號和雙引號轉義
- CSV中欄位的去掉雙引號
- CSS 單雙引號應用規範CSS
- [20190419]bash單雙引號問題.txt
- Python函式引數前的單星號(*)和雙星號(**)的作用Python函式
- python中怎麼輸出雙引號Python
- PHP雙引號的小隱患PHP
- python三引號巢狀雙引號執行結果不對Python巢狀
- 提取分割單引號 ‘ ‘ 之間的內容且不重複分割單引號 pythonPython
- MySQL 中一個雙引號的錯位引發的血案MySql
- PHP 雙引號二次解析PHP
- 變數用雙引號包起來變數
- 一個單引號引發的 MySQL 效能損失MySql
- js使用字串為什麼會出現雙引號?JS字串
- 在RedHat虛擬機器下單/雙引號打不出來的解決方法Redhat虛擬機
- JSON 屬性必須用雙引號JSON
- 陣列拆分成單引號逗號隔開的字串陣列字串
- lua獲取字串中單引號之間的字串字串
- js字串中的三種引號JS字串
- excel 如何為單元格字串前後批量新增雙引號?Excel字串
- sql中別名as,不寫,以及使用雙引號總結SQL
- mysqldump 欄位值帶單引號MySql
- 向SQLServer插入單引號問題SQLServer
- 帝國CMS文章標題和簡介帶雙引號顯示不正常的解決方法
- 事故現場:MySQL 中一個雙引號的錯位引發的血案MySql
- Mysql建表語句中顯示雙引號MySql