sql删除末尾六个零

刚开始使用replace函数,一般情况下字符串末尾出现六个零,它的去除掉,可是当情况特殊时

select replace('10000002000000','000000','') from dual;

如果字段中间也有六个零,replace会把中间六个零删掉,而且就算中间没有六个零,末尾如果是6的倍数,比如十二个零,replace就会全部替换掉,达不到想要的只去掉末尾6个零的效果。


之后想到了用rtrim这个函数,

select rtrim('10000002000000','000000') from dual;

这个函数能从右边删除六个零,而中间的六个零不会删除掉,但这只存在于末尾正好有6个零。当末尾不为六个零时,rtrim会把所有零都删除掉,这个函数等同于从字段右边开始,出现0就删除,只到第一次出现的不是0为止,等同于

select rtrim('10000002000000','0') from dual
所以使用rtrim函数还是不可以


最后想到了还是用传统的字符串截取

select case when str like '%000000' then substr(str,1,length(str)-6) else str end as new_str from dual;

这句sql的含义是当字段以6个零结尾时,就截掉后面六个字符,达到删除末尾6个零的效果。

暂时想到这个方法,有人还有其它方法,可以共享一下。

最近发现一个新的函数 regexp_replace,它可以将匹配的字符串交换。这次就删除末尾3个0.

select regexp_replace('000870006000000','(\w*)(0{3})$','\1') from dual

这个函数第二个参数传正则表达式,将正则表达式分组,分为两组,第一组(\w*)表示任意字符,第二组(0{3})表示第二组,末尾的$一定要加上,表示以3个0结尾,这个函数的第三个参数用斜杠加数字表示匹配的组,只保留第一组,就可以把第二组去除了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值