天天看點

oracle trim() ltrim() rtrim()

如果提到TRIM函數,最簡單的功能就是使用它來去除字元串的行首和行尾的空格,這個功能也是大家使用頻率最高的一種。

然而TRIM函數其實是具有删除“任意指定”字元的功能,不可謂不牛。我們來一次體驗之旅。

1.先看一下TRIM函數的完整文法描述

TRIM([ { { LEADING | TRAILING | BOTH }

         [ trim_character ]

       | trim_character

       }

       FROM

     ]

     trim_source

    )

以上文法引自于Oracle 10gR2官方文檔:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/img_text/trim.htm

單從這個文法定義上我們就可以看出,小小的TRIM函數蘊含了更多可定制的功能。一一展示,供參考。

2.最簡單的用法開始

不使用任何參數:

[email protected]> select trim ('    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g

--------

SECOOLER

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

3.其實第一種常用的方法等同于下面帶有“BOTH”參數的寫法

[email protected]> select trim (both from '    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g

--------

SECOOLER

“BOTH”參數表示同時去除字元串前後所指定的内容(預設情況下删除空格)。

4.既然試用了BOTH參數,我們再看一下“TRAILING”和“LEADING”參數效果

[email protected]> select trim (trailing from '    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g.

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

    SECOOLER

[email protected]> select trim (leading from '    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g.

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

SECOOLER

可見,使用“TRAILING”參數可以完成字元串尾部空格的删除功能;而“LEADING”參數正好相反,完成字元串頭部空格的删除功能。

也就是說,使用“TRAILING”和“LEADING”參數可以指定空格的删除位置。

5.“trim_character”參數粉墨登場

這個參數改變了“删除空格”的預設行為。

如果想要删除字元串'xxxxSECOOLERxxxx'前後出現的“x”,“trim_character”參數就派上用場了。

[email protected]> select trim ('x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g

--------

SECOOLER

配合“BOTH”、“TRAILING”和“LEADING”三個參數使用效果如下,與之前示範類似。看結果,不贅述。

[email protected]> select trim (both 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g

--------

SECOOLER

[email protected]> select trim (trailing 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g.

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

xxxxSECOOLER

[email protected]> select trim (leading 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g.

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

SECOOLERxxxx

6.需要注意的地方

這裡的“trim_character”參數隻允許包含一個字元,不支援多字元。

報錯資訊如下:

[email protected]> select trim (leading 'xy' from 'xyxxSECOOLERxyyx') "TRIM e.g." from dual;

select trim (leading 'xy' from 'xyxxSECOOLERxyyx') "TRIM e.g." from dual

       *

ERROR at line 1:

ORA-30001: trim set should have only one character

既然TRIM不能滿足我們删除隻剩“SECOOLER”字元串的要求,有麼有其他手段呢?of course有。我們使用RTRIM和LTRIM“連環拳”完成這個任務。

1)使用RTRIM

[email protected]> select rtrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;

e.g.

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

xyxxSECOOLER

2)使用LTRIM

[email protected]> select ltrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;

e.g.

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

SECOOLERxyyx

3)聯合使用RTRIM和LTRIM函數達到我們的目的

[email protected]> select ltrim(rtrim('xyxxSECOOLERxyyx','xy'),'xy') "e.g." from dual;

e.g.

--------

SECOOLER

使用RTRIM和LTRIM函數時的注意事項:“xy”不表示整個“xy”字元串進行比對,而是發現任意的字元“x”或字元“y”均做删除操作。

7.小結

在感受Oracle函數帶來便利的同時,建議對每一個常用函數都追本溯源地探究一下,也許在嘗試之後您會發現:哦,原來大家經常用到這些方法隻是其真實功能的滄海一粟。

參考資料:

http://qrqzhujinyi.javaeye.com/blog/616266

轉自http://hi.baidu.com/wan_shan/blog/item/f88045b02b10125909230216.html