Oracle Q-quote delimiter Quote(q) 字符串原样输出
? ? ? 在sql查詢中,我們經(jīng)常需要原樣輸出字符串,如果字符串中含有大量的單引號、雙引號或者特殊字符,那么需要用單引號轉(zhuǎn)義拼接字符串,這樣會非常的麻煩。 oracle提供了一個Q-quote的表達式來原樣輸出字符串。
在SQL或者PLSQL中如果要表達一個帶有特殊字符的字符串時,通常要用‘’包裝起來。但如果字符串本身包含‘或者“這樣的字符,那么實現(xiàn)起來有點繁瑣。
比如:My Name is ‘Ma Yu Ping’
用SQL實現(xiàn):
SQL> select ‘My Name Is ”Ma Yu Ping”’ names from dual;
NAMES?
———————————————-?
My Name Is ‘Ma Yu Ping’
SQL> select ‘My Name Is "Ma Yu Ping"’ names from dual;
NAMES?
———————————————-?
My Name Is "Ma Yu Ping"
在Oracle中,single-quote(‘)是一個表示字符串的關(guān)鍵字。所以在字符串中用兩個”表示一個實際的單引號字符。所有才會有了上面第一條SQL的’My Name Is ”Ma Yu Ping”’ 。雙引號“被識別為一個實際的的字符串,第二條sql中的雙引號不用括引。其實Oracle提供了一個Q-quote的表達式,用來簡化SQL或PLSQL中字符串的表示。
SQL> select?q’[My Name Is "Ma Yu Ping"]‘ names from dual;
NAMES?
———————————————-?
My Name Is "Ma Yu Ping"
SQL> select?q’[My Name Is 'Ma Yu Ping']‘?names from dual;
NAMES?
———————————————-?
My Name Is ‘Ma Yu Ping’
語法很簡單,必須將要表示的字符串用一對特殊字符括起來,這對字符必須一致。
SQL> select?q’[My Name Is 'Ma Yu Ping'|'?names from dual;?
ERROR:?
ORA-01756: 引號內(nèi)的字符串沒有正確結(jié)束
SQL> select?q'|My Name Is 'Ma Yu Ping'|'?names from dual;
NAMES?
----------------------------------------------?
My Name Is 'Ma Yu Ping'
常用簡化的寫法,比如一個where c='d'的產(chǎn)量表達式的表示方法。
SQL> select?'where c=''d'''?from dual; --老的寫法
'WHEREC=''D'''?
----------------------?
where c='d'
SQL> select?'where c='d''?from dual; --原則的寫法受’表達式的影響出錯?
select 'where c='d'' from dual?
????????????????? *?
第 1 行出現(xiàn)錯誤:?
ORA-00923: FROM keyword not found where expected
SQL> select?q'[where c='d']‘?from dual; --使用q-quote表達式的寫法
Q’[WHEREC='D']‘?
———————-?
where c=’d’
SELECT ?Q'[I'm a boy,my name is 'david']' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'(I'm a boy,my name is 'david')' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'{I'm a boy,my name is 'david'}' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'|I'm a boy,my name is 'david'|' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'aI'm a boy,my name is 'david'a' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'2I'm a boy,my name is 'david'2' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'@I'm a boy,my name is 'david'@' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'*I'm a boy,my name is 'david'*' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'#I'm a boy,my name is 'david'#' ?FROM ?DUAL; ?--結(jié)果:I'm a boy,my name is 'david'
SELECT ?Q'[[@#$%^&*~?/" ']]' FROM ?DUAL; ? --結(jié)果:[@#$%^&*~?/" ']
oracle本身默認的是單引號,但是在大家寫存儲過程或者寫SQL語句時,有時候需要拼SQL或者是SQL的值里需要傳入含單引號的值,此時就需要使用兩個單引號"''"來進行轉(zhuǎn)義,其實oracle本身提供了這種轉(zhuǎn)換默認單引號為其他標(biāo)識的方法那就是——"q"
q [Oracle's quote operator]
q'c text-to-be-quoted c' c is a single character (called the quote delimiter). With the ?quote operator? apostrophes don't have to be doubled: SQL> select q'#Oracle's quote operator#' from dual; Q'#ORACLE'SQUOTEOPERATO ----------------------- Oracle's quote operator
About Me
| ............................................................................................................................... ● 本文整理自網(wǎng)絡(luò) ● 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新 ● 本文pdf版及小麥苗云盤地址:http://blog.itpub.net/26736162/viewspace-1624453/ ● QQ群:230161599???? 微信群:私聊 ● 聯(lián)系我請加QQ好友(642808185),注明添加緣由 ● 文章內(nèi)容來源于小麥苗的學(xué)習(xí)筆記,部分整理自網(wǎng)絡(luò),若有侵權(quán)或不當(dāng)之處還請諒解 ● 版權(quán)所有,歡迎分享本文,轉(zhuǎn)載請保留出處 ............................................................................................................................... 拿起手機使用微信客戶端掃描下邊的左邊圖片來關(guān)注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學(xué)習(xí)最實用的數(shù)據(jù)庫技術(shù)。
|
???
總結(jié)
以上是生活随笔為你收集整理的Oracle Q-quote delimiter Quote(q) 字符串原样输出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置MySQL的字符编码
- 下一篇: python学习之正则表达式练习:编写一