Oracle之TRIM、LTRIM和RTRIM

最近发现一段对字符串进行trim 的SQL,发现LTRIM、RTRIM和TRIM 在ORACLE中的用法还是很强大的。

作用

三个函数功能都是对字符串进行前后去除一部分操作。但是又有点区别。先看下对比。

SELECT TRIM(BOTH '-' FROM '----FFF----ggggg----' ) AS trim_both,
TRIM( '-' FROM '----FFF----ggggg----' ) AS trim_default,
TRIM(LEADING '-' FROM '----FFF----ggggg----' ) AS trim_left, 
TRIM( TRAILING '-' FROM '-----FFF------ggggg------' ) AS trim_right,
TRIM('  ----FFF----ggggg----  ' ) AS trim_default_Empty, 
LTRIM('----FFF----ggggg----', '-F') AS ltrim_mult_char,
RTRIM('----FFF----ggggg----', '-g') AS rtrim_mult_char
FROM dual WHERE ROWNUM = 1;

上面利用三个函数对字符串进行处理,对比下不难发现一些区别。下面一个个进行理解。

TRIM

先看下文档介绍

trim( [ leading | trailing | both  [ trim_character ] FROM ]   string1 )

leading - remove trim_string from the front of string1.

trailing - remove trim_string from the end of string1.

both - remove trim_string from the front and end of string1.

If none of these are chosen (ie: leading, trailing, both), the trim function will remove trim_string from both the front and end of string1.

trim_character is the character that will be removed from string1. If this parameter is omitted, the trim function will remove all leading and trailing spaces from string1.

string1 is the string to trim.
这是 Oracle 的官方文档里面的函数介绍。
说白了,各个参数有以下作用:
leading  : 去头
trailing : 去尾
both     : 去头尾

trim_character : 不空去该字符,缺省去除空格
string1 : 待处理字符串

根据语法,不难发现会有以下的输出

BOTH

另外,如果该参数不指定时,默认也是 BOTH

SELECT TRIM(BOTH '-' FROM '----FFF----ggggg----' ) AS trim_both ,
TRIM( '-' FROM '----FFF----ggggg----' ) AS trim_default
FROM dual WHERE ROWNUM = 1;

LEADING

SELECT TRIM(LEADING '-' FROM '----FFF----ggggg----' ) AS trim_left 
FROM dual WHERE ROWNUM = 1;


TRAILING

SELECT TRIM( TRAILING '-' FROM '-----FFF------ggggg------' ) AS trim_right 
FROM dual WHERE ROWNUM = 1;



而当我们不输入要删除的字符(注意,这里我说的是字符)时,默认删除头尾的空格。

SELECT TRIM('  ----FFF----ggggg----  ' ) AS trim_default_Empty
FROM dual WHERE ROWNUM = 1;

上面没输入要trim 的单个字符参数时,函数只是把前后空格 trim 掉。为啥要单个字符?看个例子,

SELECT TRIM( TRAILING '--' FROM '-----FFF------ggggg------' ) AS trim_right 
FROM dual WHERE ROWNUM = 1;
这里报错,显然其参数必须是单个字符。错误信息如下:
ORA-30001: trim set should have only one character
30001. 00000 -  "trim set should have only one character"
*Cause:    Trim set contains more or less than 1 character. This is not
           allowed in TRIM function.

LTRIM

从名字就知道,对字符串左侧进行 trim。

SELECT LTRIM('----FFF----ggggg----', '-F') AS ltrim_mult_char
FROM dual WHERE ROWNUM = 1;
这里 LTRIM 将 '----FFF----ggggg----' 的头部的 '-' 和 'F' 都去掉了,最后变成了 'ggggg----'。显然 LTRIM 对发现的任意字符 '-' 或字符 'F' 均做删除操作。即或的关系。


RTRIM

同样的,RTRIM 功能类似,只是从尾部开始删除而已。

SELECT RTRIM('----FFF----ggggg----', '-g') AS rtrim_mult_char
FROM dual WHERE ROWNUM = 1;


从结果看,同样的对 '-' 和 'F' 进行删除。也是或的关系。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值