我有一个场景,比如当一个列值超过10个字符的长度时,我需要一个只有10个字符(最左边)的子字符串,但是如果它比它短,那么它应该用零填充。我尝试了以下方法:
with data1 as (select '1234567890123' as dummy1 from dual)
select CASE when (length(dummy1)>10) then substr(dummy1,1,10) else lpad(dummy1,10,'0') end from data1;
但这对我来说似乎还有很长的路要走。有没有更短的方法来实现这一点,也许是Oracle功能?
我尝试使用谷歌但未找到任何相关结果。
答案 0 :(得分:3)
lpad足以完成这项工作:
SELECT LPAD( '1234567890123', 10, '0' ) AS formatted
FROM dual;
答案 1 :(得分:0)
只需使用SUBSTR
和LPAD
:
WITH data ( value ) AS (
SELECT '1234567890123' FROM DUAL UNION ALL
SELECT '1' FROM DUAL
)
SELECT LPAD( SUBSTR( value, 1, 10 ), 10, '0' ) AS formatted
FROM data;
<强>输出强>:
FORMATTED
----------
1234567890
0000000001