如何将我的DECIMAL(11)
字段从转换12345678
为字符值00012345678
?
10 回答
仅使用该 DIGITS
功能,因为这会验证字段数字或小数等的长度,并在必要时在左侧以零完成。
SELECT DIGITS(FIELD) FROM ...
结果字符串的长度始终为:
- 5 如果参数是一个小整数
- 10 如果参数是一个大整数
- 19 如果参数是一个大整数
使用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
不知道你是否解决了,但是试试这个:
SELECT LPAD( DIGITS( fieldName ), 11, '0') ) as paddedFieldName FROM yourTable
LPAD 是左侧填充,但 DIGITS 函数是我让 DB2 将数值视为字符串的唯一方法。
如果这是 DB2 for i,并且 myColumn 数据类型是具有精度 (11) 和小数位数 (0) 的 DECIMAL,那么:
SELECT digits( myColumn ) FROM sysibm.sysdummy1
将返回:
....+....1.
DIGITS
00001234567
可以通过多种方式更改前导零的数量。在使用 DIGITS() 之前转换为不同的精度是一种方法。
我的 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
SELECT SUBSTRING(
CHAR(100000000000+fieldName),
2,11
) as paddedFieldName
FROM yourTable
我只想在 select 语句中定义我的字段一次,所以上面对我有用并且很整洁
我只是去了另一个方向: cast(field as int)
为您的字段 x 试试这个:
substr(digits(x), 33 - length(x), length(x) )
从数字 8,0 (datenumfld=20170101) 到01/01/2017
这对我有用:
DATE(TO_DATE(CHAR(datenumfld), 'YYYYMMDD')) as YourDate