---------------------------------------------------------------------------
---- 本文為andkylee個人原創,請在尊重作者勞動成果的前提下進行轉載;
---- 轉載務必註明原始出處
:
http://blog.csdn.net/andkylee
---
2010-06-12
18:39:40
---- 關鍵字: str_replace 15.0 null 空格 替換
----------------------------------------------------------------------------
在ASE12.5.x平台中沒有替換字串的函數,也就是說沒有類似replace的函數。對於replace這個詞,我想有編程經驗的肯定一看字面意思就知道是將某一字串中指定的字串替換為另外的字串。可惜的是這麼簡單的功能在ase12.5.x中沒有相應的函數,只有一個可憐的stuff函數。
stuff函數僅僅能夠替換某一個字串中某一個位置處的字串為另外的字串,如果這個字串中有多處需要被替換呢?抱歉,stuff歇菜了。
一個簡單的類似replace的功能還得需要寫個過程或者函數來實現。 寫起來效率低執行起來效率更低, so pooor.
誰要是實現了用簡單的一兩條sql語句頂替replace的功能,麻煩告訴我一聲。謝謝!
幸運的是,ASE15.0版本中引入了類似replace的函數,但是人家的名字叫str_replace,不知道為啥?replace這個詞和那個關鍵字衝突嗎? 不解ZZZZZZZ
str_replace函數的文法很簡單:
replace("string_expression1", "string_expression2", "string_expression3")
就是:將字串1中所包含的所有
的字串2都用字串3統統替換。
一個簡單的例子:
1> select str_replace('This is Andkylee!My nAme is andkylee!','A','a')<br />2> go<br /> -------------------------------------<br /> This is andkylee!My name is andkylee!<br />(1 row affected)
但是, 網上有人發帖說str_replace不能替換字串中的空格為“(也就是說刪除字串中的所有空格)。不看官方文檔,想當然的就寫出來這樣的語句:select str_replace('123 456 ',' ','')
但是很可惜,執行失敗。
1> select len('123 456 '),str_replace('123 456 ',' ','') ,len(str_replace('123 456 ',' ',''))<br />2> go<br /> ----------- -------- -----------<br /> 8 123 456 8<br />(1 row affected)
如上可以看到select str_replace('123 456 ',' ','')並沒有替換其中的空格為空白(亦即刪除其中的所有空格),用函數str_replace執行前後的字串是相同的。
通過查閱官方文檔中關於str_replace的介紹,有下面的兩點需要注意:
1. Adaptive Server 將Null 字元串常量自動轉換為 1 個空格的字串,以便將該字串與 NULL 值區分開。
2. str_replace 在第三個參數中接受 NULL,將其視為嘗試用 NULL 替換 string_expression2,有效地將 str_replace 轉換成“字串切除”
操作。
這兩條的意思是說:在函數str_replace中""相當於" ", NULL 相當於“”(Null 字元)。
""相當於" "
樣本:
1> select str_replace("cde fghi ","","_")<br />2> go<br /> ---------<br /> cde_fghi_<br />(1 row affected)<br />1> select str_replace("cde fghi "," ","_")<br />2> go<br /> ---------<br /> cde_fghi_<br />(1 row affected)
兩個空格還是2個空格意思:
1> select str_replace("cde fghi "," ","_")
2> go
---------
cde fghi
(1 row affected)
NULL 相當於“”(Null 字元)
樣本如下:
1> select str_replace("cde fghi "," ",null),len(str_replace("cde fghi "," ",null))<br />2> go<br /> --------- -----------<br /> cdefghi 7<br />(1 row affected)<br />1> select str_replace("cde fghi ","",null),len(str_replace("cde fghi "," ",null))<br />2> go<br /> --------- -----------<br /> cdefghi 7<br />(1 row affected)
總結:
在函數str_replace中NULL 相當於“”(Null 字元),""相當於" " 。其它都是正常的。