DB2 SQL将十进制转换为带填充零的字符

时间:2013-03-20 21:39:03

标签: sql db2

如何将DECIMAL(11)字段从12345678转换为字符值00012345678

10 个答案:

答案 0 :(得分:14)

仅使用DIGITS函数,因为这会验证字段数字或小数等的长度,并在必要时以左边的零结束。

SELECT DIGITS(FIELD) FROM ...

答案 1 :(得分:9)

使用http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2.doc.sqlref/castsp.htm了解有关CAST的详细信息 和http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_scalarfunctionsintro.htm用于字符串函数,
我认为这应该可以解决问题 -

SELECT LPAD( CAST(FIELD AS CHAR(11)) ,11,'0') AS PADDEDFIELD

答案 2 :(得分:9)

根据您在@Mr Fuzzy Botton的回答中的评论,我猜你正在DB2 for i,它没有LPAD功能。您可以改为使用REPEATRIGHT函数的组合:

SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table

答案 3 :(得分:2)

不知道你是否已经解决了,但试试这个:

SELECT LPAD( DIGITS( fieldName ), 11, '0') ) as paddedFieldName FROM yourTable

LPAD是左边的填充,但DIGITS函数是我让DB2将数值视为字符串的唯一方法。

答案 4 :(得分:1)

如果这是DB2 for i,myColumn数据类型是DECIMAL,精度(11)和scale(0),那么:

SELECT digits( myColumn ) FROM sysibm.sysdummy1

将返回:

....+....1.
DIGITS     
00001234567

可以通过多种方式更改前导零的数量。在使用DIGITS()之前,使用不同的精度是一种方法。

答案 5 :(得分:0)

我刚刚走向另一个方向:cast(field as int)

答案 6 :(得分:0)

我的LeftPad功能没有LeftPad功能

 REPEAT('0', 4-length(MY_COLUMN_VALUE))||CHAR(MY_COLUMN_VALUE) as NEW_COLUMN

MY_COLUMN_VALUE NEW_COLUMN
1               0004
23              0023

测试......

SELECT '32' MY_VALUE, REPEAT('0', 4-length('23'))||CHAR('23') as LEFTPAB_MY_VALUE FROM sysibm.sysdummy1

答案 7 :(得分:0)

为您的字段x尝试以下操作:

substr(digits(x), 33 - length(x), length(x) )

答案 8 :(得分:0)

SELECT SUBSTRING( 
          CHAR(100000000000+fieldName),
          2,11
       ) as paddedFieldName
FROM yourTable

我只想在select语句中定义一次字段,因此上面的内容对我来说很整洁

答案 9 :(得分:-1)

从数字8,0(datenumfld = 20170101)到01/01/2017这对我有用:

DATE(TO_DATE(CHAR(datenumfld), 'YYYYMMDD')) as YourDate