DB2 SQL преобразует десятичный символ в символьную площадку с нулями

Как преобразовать DB2 DECIMAL (11) из 12345678 в значение символа 00012345678

Ответ 1

Моя функция LeftPad, без функции LeftPad

REPEAT('0', 4-length(MY_COLUMN)) || CHAR(MY_COLUMN) as NEW_COLUMN
MY_COLUMN       NEW_COLUMN
4               0004
23              0023

тестирование...

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

Ответ 2

Используйте только функцию DIGITS, потому что это проверяет длину поля числовое или десятичное и т.д. и завершает нулями влево, когда это необходимо.

SELECT DIGITS(FIELD) FROM ...

Ответ 3

Используя 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

Ответ 4

Основываясь на вашем комментарии в ответе @Mr Fuzzy Botton, я предполагаю, что вы находитесь на DB2 for i, который не имеет функции LPAD. Вместо этого вы можете использовать комбинацию REPEAT и RIGHT:

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

Ответ 5

Не знаю, проработали ли вы это, но попробуйте это:

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

LPAD - это левое дополнение, но функция DIGITS была единственным способом, с помощью которого DB2 обрабатывала числовое значение, подобное строке.

Ответ 6

Если это DB2 для i, а тип данных myColumn - DECIMAL с точностью (11) и шкалой (0), то:

SELECT digits( myColumn ) FROM sysibm.sysdummy1

вернется:

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

Изменение числа начальных нулей может быть выполнено разными способами. CASTing с другой точностью перед использованием DIGITS() является одним из способов.

Ответ 7

Я только что пошел в другом направлении: cast (field as int)

Ответ 8

Попробуйте это для своего поля x:

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

Ответ 9

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

Я только хотел определить свое поле один раз в выражении select, чтобы выше это работало для меня и было аккуратным

Ответ 10

От Numeric 8,0 (datenumfld = 20170101) до 01/01/2017 Это работает для меня:

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