【函式】translate解惑

skyin_1603發表於2016-10-09
1、語法
TRANSLATE(expr, from_string, to_string)

2、功能
expr中的字串進行替換,替換的規則是:from_string與to_string一一對應進行替換,如果沒有對應上,那麼將expr中的相應字元將刪除。
文字描述不好理解,我們直接上例子。

3、例題
將字串'123a1b2c3456'中所有的數字刪除,保留英文字元,即處理後的字串應為'abc'

SYS@ORA11GR2>select translate('123a1b2c3456','x0123456789','x') as string from dual;

STRING
----------
abc

SYS@ORA11GR2>

4、解釋例題
按照 translate函式中from_string與to_string一一對應進行替換規則,我們可以這樣理解
(注:"=>"表示替換)
x=>x,
0=>null(也可以理解為將字串中所有出現的0刪除)
1=>null
2=>null
3=>null
4=>null
5=>null
6=>null
7=>null
8=>null
9=>null
這一串替換下來,把字串'123a1b2c3456'中的所有數字就都刪除了,以達到去除字串中數字的效果。

5、疑問
疑問出現了,今天一個朋友問我,from_string和to_string引數中的x略顯多餘,直接把x去掉,改為('123a1b2c3456','0123456789','')不就可以了嗎?

我印象中這樣一定是不行的,具體是為什麼,我忘記了,測試了一下,確實應驗了,返回的是null,那麼究其原因何在呢?

只能去官方文件中一查究竟,看看有沒有相關的介紹,果然有,官方解釋如下:
“You cannot use an empty string for to_string to remove all characters in from_string from the return value. Oracle Database interprets the empty string as null, and if this function has a null argument, then it returns null. To remove all characters in from_string, concatenate another character to the beginning of from_string and specify this character as the to_string. For example, TRANSLATE(expr, 'x0123456789', 'x') removes all digits from expr.”

6、小結
也就是說to_string這個引數是不被允許的,如果為空的話,那麼這個函式就直接返回null。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2126006/,如需轉載,請註明出處,否則將追究法律責任。

相關文章