ASE15.0.3中替換字串函數str_replace的奇怪的用法

來源:互聯網
上載者:User

---------------------------------------------------------------------------

---- 本文為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 字元),""相當於" " 。其它都是正常的。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.