Oracle 截断函数详解(trim、ltrim、rtrim)

文章目录

1 概述

1. 区别: '截断(删除)的位置不同、指定字符个数不同'
   (1) trim() :截断 '左、右' 两边出现的任何指定字符,最多只能指定 '一个字符'
   (2) ltrim():截断 '左' 边出现的任何指定字符,可指定 '多个字符'
   (3) rtrim():截断 '右' 边出现的任何指定字符,可指定 '多个字符'
   -- 若无给定字符,默认 '空格'   
2. 不足:'无法截断(删除)中间位置的字符',可通过其它替代方案

 
 

2 语法

示例1:缺省时,默认截断 "空格"

-- '|' : 方便观察
select '|' || trim('  a b c  ') || '|' a,  -- |a b c|
       '|' || ltrim('  a b c  ') || '|' b, -- |a b c  |
       '|' || rtrim('  a b c  ') || '|' c  -- |  a b c|
  from dual;

 
 

示例2:截断指定字符

select ltrim('abYaYba', 'a') l1,  -- byayba
       rtrim('abYaYba', 'a') r1,  -- abyayb       
       ltrim('abYaYba', 'ab') l2, -- yayba
       rtrim('abYaYba', 'ab') r2  -- abyay
  from dual;
-- 也可由 trim() 替代,不过写法比较麻烦,而且 trim() 只能指定 '一个字符'
select trim(leading 'a' from 'abYaYba') l1,  -- byayba
       trim(trailing 'a' from 'abYaYba') r1, -- abyayb       
       trim(both 'a' from 'abYaYba') b -- byayb
  from dual;

 
 

详见: Oracle 官方文档 - trim()

3 扩展

上述的案例中,我们可以看到 '左截断、右截断、左右两边截断'
但如果想 '仅删除中间' 指定字符该如何处理呢?

 
 

示例:(写法有很多,以下仅供参考)

--****************************************
-- 思路: '源字符串' = 左截断 + 中间 + 右截断
--       再单独处理 '中间' 的字符串
--       最后和左、右 字符串拼接得到最终的结果
--****************************************
with t_demo as
 (select 'aabYaYbaa' str_source, 'a' str_target from dual),
t_deal_with_string as
 (select t.str_source,
         t.str_target,
         trim(both t.str_target from t.str_source) str_middle,
         replace(trim(both t.str_target from t.str_source), t.str_target) str_middle_new,
         replace(t.str_source, ltrim(t.str_source, t.str_target)) str_left,
         replace(t.str_source, rtrim(t.str_source, t.str_target)) str_right
    from t_demo t)
select t.str_source 源字符串,
       t.str_target 给定字符,
       (t.str_left || t.str_middle_new || t.str_right) 替换后字符串
  from t_deal_with_string t;

 
 

输出结果:

1	aabYaYbaa	a	aabYYbaa

 
 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值