16

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

4

10 回答 10

17

仅使用该 DIGITS功能,因为这会验证字段数字或小数等的长度,并在必要时在左侧以零完成。

SELECT DIGITS(FIELD) FROM ...

结果字符串的长度始终为:

  • 5 如果参数是一个小整数
  • 10 如果参数是一个大整数
  • 19 如果参数是一个大整数
于 2015-04-21T15:12:34.583 回答
11

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

SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table
于 2013-03-21T13:51:59.983 回答
10

使用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

于 2013-03-20T23:35:03.397 回答
3

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

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

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

于 2013-10-03T18:38:46.423 回答
1

如果这是 DB2 for i,并且 myColumn 数据类型是具有精度 (11) 和小数位数 (0) 的 DECIMAL,那么:

SELECT digits( myColumn ) FROM sysibm.sysdummy1

将返回:

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

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

于 2015-04-22T06:46:57.900 回答
1

我的 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
于 2017-05-24T12:50:42.933 回答
1
SELECT SUBSTRING( 
          CHAR(100000000000+fieldName),
          2,11
       ) as paddedFieldName
FROM yourTable

我只想在 select 语句中定义我的字段一次,所以上面对我有用并且很整洁

于 2018-11-09T13:48:41.827 回答
0

我只是去了另一个方向: cast(field as int)

于 2013-03-21T02:03:07.920 回答
0

为您的字段 x 试试这个:

substr(digits(x), 33 - length(x), length(x) )
于 2018-08-27T08:37:39.700 回答
-1

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

DATE(TO_DATE(CHAR(datenumfld), 'YYYYMMDD')) as YourDate
于 2018-03-15T18:19:01.460 回答