Oracle中的ltrim()函数是专门用于字符串左裁剪的内置函数,默认情况下可以移除字符串左侧的所有空格,也可以指定需要移除的字符集合,从字符串左侧开始逐个匹配,直到遇到不在指定集合中的字符为止,在数据清洗、格式统一等场景中应用十分广泛。

ltrim()函数基础语法
ltrim()函数有两种常见的语法形式,分别对应默认移除空格和指定移除字符的场景:
-- 语法1:默认移除左侧空格 LTRIM(string) -- 语法2:指定移除左侧的字符集合 LTRIM(string, trim_chars)
其中string是待处理的原始字符串,可以是字段名、字符串常量或者字符串表达式;trim_chars是可选参数,表示需要从左侧移除的字符集合,如果不传入该参数,默认移除左侧的空格。
基础使用场景示例
场景1:移除字符串左侧空格
当我们需要清理字符串左侧的多余空格时,直接使用不带第二个参数的ltrim()即可:
SELECT LTRIM(' hello oracle') AS result FROM DUAL;
-- 执行结果:hello oracle
-- 左侧的3个空格被全部移除场景2:移除指定字符集合
如果需要移除左侧的特定字符,传入第二个参数指定字符集合即可,函数会从左侧开始逐个匹配字符,只要字符在集合中就移除,直到遇到不在集合中的字符:
-- 移除左侧的0和#
SELECT LTRIM('000#123#456', '0#') AS result1 FROM DUAL;
-- 执行结果:123#456
-- 移除左侧的数字
SELECT LTRIM('123abc456', '0123456789') AS result2 FROM DUAL;
-- 执行结果:abc456实际业务场景应用
在实际业务中,ltrim()常用来处理格式不统一的字段数据,比如用户手机号前面可能带有的区号前缀、订单号前面的固定填充字符等:
-- 假设user_phone字段可能存在+86前缀,需要统一移除 SELECT user_id, LTRIM(user_phone, '+86') AS clean_phone FROM user_info; -- 假设order_no字段前面用0填充到10位,需要去掉前面的0 SELECT order_id, LTRIM(order_no, '0') AS real_order_no FROM order_table;
使用注意事项
- ltrim()只会处理字符串左侧的字符,右侧的匹配字符不会被移除,如果需要处理右侧可以用rtrim(),处理两侧可以用trim()。
- 第二个参数的字符集合是无序的,只要左侧字符属于集合中的任意一个就会被移除,不需要按固定顺序匹配。
- 如果原始字符串全部是需要移除的字符,函数会返回空字符串,不会返回NULL。
- 传入的参数如果是NULL,函数返回值也为NULL。
对比其他裁剪函数
为了更清晰区分不同裁剪函数的使用场景,我们可以参考下面的对比表格:
| 函数名 | 作用 | 语法示例 |
|---|---|---|
| ltrim() | 移除字符串左侧指定字符(默认空格) | LTRIM(' abc', ' ') |
| rtrim() | 移除字符串右侧指定字符(默认空格) | RTRIM('abc ', ' ') |
| trim() | 移除字符串两侧指定字符(默认空格) | TRIM(' abc ') |