標籤:blog os strong div ar oracle log har
translate 是用來替換字元的函數
文法:
translate(char, from_str,to_str)
其中,char是待處理的字串.
from_str是按順序排列若干個要被替換的字元集合,注意是字元集合而不是字串。
to_str 是按順序對應from_str要被替換成的字元集合。
例如:
translate(‘abcd‘,‘ab‘,‘AB‘)
執行上面語句後, ‘abcd‘中的‘a‘ 被‘A‘替換, ‘b‘被‘B‘替換。所以返回"ABcd"
這樣看上去跟replace函數很類似。
但是,在
replace(‘abcd‘,‘ab‘,‘AB‘) 語句中, 是把‘abcd‘中的 ‘ab‘ 整個字串替換成‘AB‘, 應該能看出與上面translate的區別了吧。
舉個例子
translate(‘acbd‘,‘ab‘,‘AB‘) 會返回"AcBd" ,因為‘a‘ 被‘A‘替換, ‘b‘被‘B‘替換嘛,替換是每1個字元單獨處理的。
而 replace(‘acbd‘,‘ab‘,‘AB‘) 則返回"acbd”, 因為字串‘ab‘找不到啊, 所以沒有做到替換處理。
下面寫一些translate的一些要注意的特性。
1.
translate(‘abcd‘,‘abc‘,‘A‘) 中, 字元a會被‘A‘替換, 而b與c則沒有指定替換成什麼,oracle會預設替換成null。所以返回‘Ad‘.
2.
translate(‘abcd‘,‘abc‘,‘‘) 中, 連A被替換的字元也被省略掉了,是不是因為abc 3個 字元都被替換成null,所以返回d呢?
答案是錯的, 如果to_str是blank(‘‘)或者null,則所有字元都會替換成null, 所以這個運算式返回null.
3.translate有許多特別的用途,
例如 我想將1個字串內的數字全部去掉,則可以用
translate(str,‘a1234567890‘,‘a‘)
這樣的話字串的a(如果存在的話)會被替換成自己a,而其他數字會替換成null,注意是null而不是空格啊。
或者
translate(str,‘ 1234567890‘,‘ ‘)
用空格來代替上面的‘a‘也ok,注意from_str和to_str都是以空格開頭啊。
而不能用
translate(str,‘1234567890‘,‘‘) , 參考上面的特性2,會返回null的啊。