DB2 SQL converter decimal para bloco de caracteres com zeros

Como posso converter DB2 DECIMAL(11) de 12345678 para o valor do carácter 00012345678

 10
Author: macunte, 2013-03-21

9 answers

A minha função LeftPad sem a função LeftPad

 REPEAT('0', 4-length(MY_COLUMN_VALUE))||CHAR(MY_COLUMN_VALUE) as NEW_COLUMN

MY_COLUMN_VALUE NEW_COLUMN
1               0004
23              0023
Teste...
SELECT '32' MY_VALUE, REPEAT('0', 4-length('23'))||CHAR('23') as LEFTPAB_MY_VALUE FROM sysibm.sysdummy1
 0
Author: Adam111p, 2017-05-24 12:56:06

Utilize apenas a função DIGITS, porque isto verifica o comprimento do campo numérico ou decimal, etc e completa com zeros à esquerda quando necessário.

SELECT DIGITS(FIELD) FROM ...
 11
Author: kelgwiin, 2015-04-21 15:12:34

Usando http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2.doc.sqlref/castsp.htm para mais detalhes sobre o CAST
e http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_scalarfunctionsintro.htm para funções de texto,
Presumo que isto sirva para o truque ...

SELECT LPAD( CAST(FIELD AS CHAR(11)) ,11,'0') AS PADDEDFIELD

 9
Author: AjV Jsy, 2013-03-20 23:35:03
Com base no seu comentário na resposta do Sr. Fuzzy Botton, acho que está DB2 for i, que não tem a função LPAD. Em vez disso, você poderia usar uma combinação do REPEAT e RIGHTfunções:
SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table
 9
Author: bhamby, 2013-03-21 13:51:59
Não sei se já percebeste, mas tenta isto.
SELECT LPAD( DIGITS( fieldName ), 11, '0') ) as paddedFieldName FROM yourTable

O LPAD é o acolchoamento esquerdo, mas a função dos dígitos foi a única maneira que consegui que o DB2 tratasse o valor numérico como uma cadeia de caracteres.

 2
Author: Filipe, 2015-04-21 15:17:31

Se este for DB2 para i, e o tipo de dados da minha coluna for DECIMAL com precisão (11) e escala (0), então:

SELECT digits( myColumn ) FROM sysibm.sysdummy1

Vai voltar:

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

Mudar o número de zeros iniciais pode ser feito de muitas maneiras. O vazamento para uma precisão diferente antes de usar dígitos() é uma maneira.

 1
Author: user2338816, 2015-04-22 06:46:57

Eu apenas fui para o outro lado: cast (campo como int)

 0
Author: macunte, 2013-03-21 02:03:07

Do numérico 8,0 (datenumfld=20170101) para {[1] } isto funciona para mim:

DATE(TO_DATE(CHAR(datenumfld), 'YYYYMMDD')) as YourDate
 0
Author: Not an expert, 2018-03-16 06:12:46

Tente isto para o seu campo x:

substr(digits(x), 33 - length(x), length(x) )
 0
Author: funnyfish, 2018-08-27 08:37:39