TRIM函數最簡單的功能就是使用它來去除字符串的行首和行尾的空格,這個功能也是大家使用頻率最高的一種。然而在Oracle中TRIM函數其實是具有刪除“任意指定”字符的功能,下面就進行詳細地講解。
1.Oracle中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.刪除字符串前后的空格
如果trim函數不使用任何參數時,可以去除字符串前后的空格
sec@ora10g> select trim (' SECOOLER ') "TRIM e.g." from dual;
TRIM e.g
--------
SECOOLER
這也是最常見的一種使用方法,都使用默認的參數,默認情況下TRIM會同時刪除字符串前后出現的空格。
3.both參數的使用方法
sec@ora10g> select trim (both from ' SECOOLER ') "TRIM e.g." from dual;
TRIM e.g
--------
SECOOLER
“BOTH”參數表示同時去除字符串前后所指定的內容(默認情況下刪除空格)。
4.“TRAILING”和“LEADING”參數的使用方法
sec@ora10g> select trim (trailing from ' SECOOLER ') "TRIM函數使用" from dual;
TRIM函數使用
------------
SECOOLER
sec@ora10g> select trim (leading from ' SECOOLER ') "TRIM函數使用" from dual;
TRIM函數使用
------------
SECOOLER
可見,使用“TRAILING”參數可以完成字符串尾部空格的刪除功能;而“LEADING”參數正好相反,完成字符串頭部空格的刪除功能。
也就是說,使用“TRAILING”和“LEADING”參數可以指定空格的刪除位置。
5.“trim_character”參數粉墨登場
這個參數改變了“刪除空格”的默認行為。
如果想要刪除字符串'xxxxSECOOLERxxxx'前后出現的“x”,“trim_character”參數就派上用場了。
sec@ora10g> select trim ('x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;
TRIM e.g
--------
SECOOLER
配合“BOTH”、“TRAILING”和“LEADING”三個參數使用效果如下,與之前演示類似。看結果,不贅述。
sec@ora10g> select trim (both 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;
TRIM e.g
--------
SECOOLER
sec@ora10g> select trim (trailing 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;
TRIM e.g.
------------
xxxxSECOOLER
sec@ora10g> select trim (leading 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;
TRIM e.g.
------------
SECOOLERxxxx
6.需要注意的地方
這里的“trim_character”參數只允許包含一個字符,不支持多字符。
報錯信息如下:
sec@ora10g> 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”字符串的要求。我們使用RTRIM和LTRIM“連環拳”完成這個任務。
1)使用RTRIM
sec@ora10g> select rtrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;
e.g.
------------
xyxxSECOOLER
2)使用LTRIM
sec@ora10g> select ltrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;
e.g.
------------
SECOOLERxyyx
3)聯合使用RTRIM和LTRIM函數達到我們的目的
sec@ora10g> select ltrim(rtrim('xyxxSECOOLERxyyx','xy'),'xy') "e.g." from dual;
e.g.
--------
SECOOLER
使用RTRIM和LTRIM函數時的注意事項:“xy”不表示整個“xy”字符串進行匹配,而是發現任意的字符“x”或字符“y”均做刪除操作。
7.小結
在感受Oracle函數帶來便利的同時,建議對每一個常用函數都追本溯源地探究一下,也許在嘗試之后您會發現:哦,原來大家經常用到這些方法只是其真實功能的滄海一粟。
新聞熱點
疑難解答