ORACLE中字串的替換和trim

2021-08-26 17:17:43 字數 3639 閱讀 6290

今天工作的時候碰見乙個問題,乙個表中某乙個欄位的資料需要更新但又不能全部更新,只能部分替換是最簡單,所以稍微了一下oracle中如何對字串進行替換的方法。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('   1 1   ') aa from dual; 

aa--

1 1

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

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

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

aa--

1 1

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

3)、使用leading與trailing引數即是左刪除和右刪除

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

aa----

1 1

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

-----

1 1

從結果中得分隔符'-',可以發現使用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

如果是要替換乙個表中某個欄位中的批量資料的話可以使用如下sql

sql> update tablename t set t.a = replace(t.a,'***x','wwww');
與使用trim函式的結果進行對比,我們可以發現,使用replace函式不僅可以去除字串兩端的空格,也可去除字串內部的空格。 當然,如果只是要去除字串兩端的空格,使用trim函式效率會更高。

字串 字串的查詢和替換

hello str hello world 1.判斷是否以指定字串開始 print hello str.startswith hello 2.判斷是否以指定字串結束 print hello str.endswith world 3.查詢指定字串 index同樣可以查詢指定的字串在大字串中的索引 pr...

字串擷取和字串替換

substring 叫做擷取字串,split叫做字串分割 substring擷取,下面是從第0位擷取前3個 說白了是從第一位擷取前3個 中的0索引就是我們常說的第一位 列印結果 用一生 split擷取,下面是通過 擷取,把字元分為6部分 string txta 用,一,生,下,載,你 string ...

php替換字串中,php 字串替換方法

字串替換是開發過程中經常用的資料處理的方式。下面我們就為大家介紹一下php中字元創的替換方法。substr replace 把字串的一部分替換為另乙個字串 str replace 使用乙個字串替換字串中的另一些字元 substr replace substr replace 函式用於把字串的一部分替...