如何将DECIMAL(11)
字段从12345678
转换为字符值00012345678
?
答案 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
功能。您可以改为使用REPEAT
和RIGHT
函数的组合:
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