oracle 去掉左边的字符串

比如 查询结果为 00005xxxxxx 我想得到05xxxxxx
写ltrim('00005xxxxxx','000')会把4个0都去掉,而我在得到结果前不知道该串前有几个0,而且如果左侧不是'000'的话就不去掉,这样的话如何解决才能只在左侧存在'000'的时候去掉且仅去掉'000'
补充
1,要查询内容并非全部数字,可能存在字母
2,内容中前面有几个0不确定,唯一确定的是如果有'000'开头则去掉且仅去掉'000',如果没有则不做任何操作,即如果查询结果开头只有两个0则不做改动直接返回
3.已经是CASE WHEN THEN中THEN的返回内容,不想让语句层次太深
最新回答
刘海是用来遮住眼泪

2024-04-22 10:02:06

--ORACLE 10G及以上可以简单的应用如下正则表达式,参数1是你的原串,参数二表示从开始匹配多个0,参数三就是替换的内容,提换为你想要的 如 1个0,几个0,或其它
既然是3个0那就修改为这样了
SELECT REGEXP_REPLACE('0005xxxxxx', '^0{3}, '') FROM DUAL;
或者3个以上保留一个的话就
ECT REGEXP_REPLACE('0000005xxxxxx', '^0{3,}, '0') FROM DUAL;
夜莺与鲸

2024-04-22 22:39:36

可以用截取的方式 啊

with t as (select '00005xxxxxx' n from dual union all
select '0004xx' n from dual union all
select '002ss' from dual )

select decode(substr(t.n,1,3),'000', substr(t.n, 4), t.n) from t
野港

2024-04-22 07:03:06

那你觉得这样做能行吗?
SELECT REGEXP_REPLACE('00005xx000', '^000', '') FROM DUAL;
结果是: 05xx000
不痴情罪名

2024-04-22 04:35:25

可以这样试试
select replace(substr('00005xxxxxx',2,3),'') from 表名;
海枯鱼亡

2024-04-22 20:38:30

使用Case when 语句解决
可能用到的函数replace,leftstr,substr