我正在使用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}}
答案 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
。