Как преобразовать DB2 DECIMAL (11) из 12345678 в значение символа 00012345678
DB2 SQL преобразует десятичный символ в символьную площадку с нулями
Ответ 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