sql修剪一些前导0

时间:2016-11-08 23:33:32

标签: sql oracle

我正在使用Oracle数据库,需要修剪一些前导零,但是我需要留下足够的前导零来填充字段长度至少4个字符。这是一些示例数据,其中'myField'是输入,'cooked'是我想要的输出:

case
  when length(trim(leading 0 from myfield)) >= 4 then trim(leading 0 from myfield)
  else lpad(trim(leading 0 from myfield), 4 , 0)
end as cooked

我用它来实现我的目标,但想知道是否有更好的方法

{{1}}

1 个答案:

答案 0 :(得分:4)

有!例如,使用regexp_substr()

with
     test_data ( myfield ) as (
       select '0000000009' from dual union all
       select '0000123456' from dual union all
       select '00ABCE1234' from dual
     )
-- end of test data; solution (SQL query) begins below this line
select myfield, regexp_substr(myfield, '^0+(.{4,}$)', 1, 1, null, 1) as cooked
from   test_data
;

MYFIELD    COOKED   
---------- ----------
0000000009 0009      
0000123456 123456    
00ABCE1234 ABCE1234  

这假设myfield长度至少为四个字符;如果它不是,并且您不需要在零填充时填充零,则可以在函数中用myfield替换'0000' || myfield