oracle 字串替換 去空格

2021-05-27 22:02:39 字數 3227 閱讀 5721

今天學習了一下oracle中如何對字串進行去除空格的方法,這裡總結一下。了解到的方法主要有兩種:trim函式以及replace函式。下面我詳細的介紹一下,這兩種用法,不足的地方還望各位朋友補充。

首先便是這trim函式。trim 函式具有刪除任意指定字元的功能,而去除字串首尾空格則是trim函式被使用頻率最高的一種。語法trim ( string ) ,引數string:string型別,指定要刪除首部和尾部空格的字串返回值string。函式執行成功時返回刪除了string字串首部和尾部空格的字串,發生錯誤時返回空字串("")。 如果引數值為null時,會丟擲空指標異常。在oracle中,trim使用的形式多為人rtrim()與ltrim()兩種,分別為去除字串右邊空格與去除字串左邊空格。

當然trim的功能不止如此,下面進行細緻的介紹,這裡我多以去除字串空格為例。

我們看下trim函式的語法描述:trim( [   [trim_character]|trim_character}  from] trim_source

1)、不使用任何引數

sql> select trim('   11   ') aa from dual;

aa--11

這是最常見的一種使用方法,都使用預設的引數,預設情況下trim會同時刪除字串前後出現的空格。

2)、使用both引數,效果等同於方法一不使用任何引數

sql> select trim(both from '   11   ') aa from dual;

aa--11

「both」引數表示同時去除字串前後所指定的內容(預設情況下刪除空格)。

3)、使用leading與trailing引數

sql> select trim(leading from '   11  ') aa from dual;

aa----11

sql> select trim(trailing from '   11  ') aa from dual;

aa-----

11從結果中得分隔符'-',可以發現使用leading引數可以去除字串右端的空格,而trailing引數則可以去除字串左端的空格。正如oracle提供的rtrim()與ltrim()。

4)、使用trim_character引數

trim_character引數改變了「刪除空格」的預設行為。如果想要刪除字串'***xworld***x'前後出現的「x」,「trim_character」引數就派上用場了。

sql> select trim('x' from '***xworld***x') aaaaa from dual;

aaaaa

-----

world

trim_character配合「both」、「trailing」和「leading」三個引數使用效果如下,與之前演示類似。看結果,不贅述。

sql> select trim('x' from '***xworld***x') aaaaa from dual;

aaaaa

-----

world

sql> select trim(both 'x' from '***xworld***x') aaaaa from dual;

aaaaa

-----

world

sql> select trim(trailing 'x' from '***xworld***x') aaaaa from dual;

aaaaa

---------

***xworld

sql> select trim(leading 'x' from '***xworld***x') aaaaa from dual;

aaaaa

---------

world***x

必須注意的一點是這裡的「trim_character」引數只允許包含乙個字元,不支援多字元。trim不能滿足我們去除多字元要求,但是我們可以使用rtrim和ltrim來處理。

1)使用rtrim 

sql> select rtrim('or***xworld***xor','or') aaaaa from dual;

aaaaa

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

or***xworld***x

2)使用ltrim

sql> select ltrim('or***xworld***xor','or') aaaaa from dual;

aaaaa

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

***xworld***xor

3)聯合使用rtrim和ltrim函式達到我們的目的

sql> select rtrim(ltrim('or***xworld***xor','or'),'or') aaaaa from dual;

aaaaa

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

***xworld***x

使用rtrim和ltrim函式時的注意事項:「or」不表示整個「or」字串進行匹配,而是發現任意的字元「o」或字元「r」均做刪除操作。

對於trim函式的應用就介紹到,下面介紹一下replace函式,個人覺得replace函式在去空格時更好用。replace 函式用第三個表示式替換第乙個字串表示式中出現的所有第二個給定字串表示式。來看下replace函式的語法描述:replace('string_replace1','string_replace2','string_replace3')   

'string_replace1' 待搜尋的字串表示式,string_replace1 可以是字元資料或二進位制資料。

'string_replace2' 待查詢的字串表示式,string_replace2 可以是字元資料或二進位制資料。

'string_replace3' 替換用的字串表示式,string_replace3 可以是字元資料或二進位制資料。

返回型別,如果 string_replace(1、2 或 3)是支援的字元資料型別之一,則返回字元資料;如果 string_replace(1、2 或 3)是支援的 binary 資料型別之一,則返回二進位制資料。

這裡我們依然以去空格為例。

sql> select replace('   aa  kk  ',' ','') abcd from dual;

abcd

----

aakk

與使用trim函式的結果進行對比,我們可以發現,使用replace函式不僅可以去除字串兩端的空格,也可去除字串內部的空格。

當然,如果只是要去除字串兩端的空格,使用trim函式效率會更高。

字串替換空格

點 抽象問題簡化問題 題意 乙個字串,比如 aaa baea erwe dsa dsa f a 替換其中的空格字元為 20 劍指offer面試題4 思路 這個問題的點在於,如果正常從頭到尾替換的話,每乙個被替換空格,它後面的全部字串都需要做整體移動 所以要設法想出,怎麼能夠減少字串移動 非空格字元需...

替換空格(字串)

思路一 利用string類的replaceall方法 public class solution 思路二 將字串轉換為字元陣列 建立乙個新的stringbuffer的物件,遍歷字元陣列,將不為空格的字元直接存入 當遇到空格時,存入 20 public class solution return st...

字串 替換空格

方法 從後往前替換,先求出字串總長度 空格數 新字串長度,然後兩個指標分別指向原始字串末尾和新字串末尾,依次替換,遇到空格時則替換為 0 2 include includevoid replaceblank char string,int length int newlength originall...