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