2017-04-26 33 views
1

我有一個場景,就像列值超過10個字符的長度一樣,我只需要一個只有10個字符的子字符串(最左邊),但是如果它比它短,它應該填充零。我試過如下:oracle中是否有任何函數保持字符串長度不變?

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的功能?

我試圖谷歌,但沒有找到任何相關的結果。

回答

3

LPAD就足以勝任:

SELECT LPAD('1234567890123', 10, '0') AS formatted FROM dual;

0

只需使用SUBSTRLPAD在一起:

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 
相關問題