DB2 SQL conversion décimale en bloc de caractères avec zéros

Comment puis-je convertir DB2 décimal(11) de 12345678 en valeur de caractère 00012345678

10
demandé sur macunte 2013-03-21 01:39:03

9 réponses

ma fonction LeftPad sans la fonction LeftPad

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

MY_COLUMN_VALUE NEW_COLUMN
1               0004
23              0023

essais ...

SELECT '32' MY_VALUE, REPEAT('0', 4-length('23'))||CHAR('23') as LEFTPAB_MY_VALUE FROM sysibm.sysdummy1
0
répondu Adam111p 2017-05-24 12:56:06

DIGITS fonction, parce que cela vérifie la longueur de la zone numérique ou décimale, etc et complète avec des zéros à gauche quand est nécessaire.

SELECT DIGITS(FIELD) FROM ...
11
répondu kelgwiin 2015-04-21 15:12:34

en utilisant http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2.doc.sqlref/castsp.htm pour plus de détails sur CAST

et http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_scalarfunctionsintro.htm pour les fonctions de chaîne,

Je suppose que cela devrait faire l'affaire -

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

9
répondu AjV Jsy 2013-03-20 23:35:03

basé sur votre commentaire dans la réponse de @Mr Fuzzy Botton, je devine que vous êtes sur DB2 for i, qui n'a pas l' LPAD fonction. Vous pouvez à la place utiliser une combinaison du REPEAT et RIGHTfonctions:

SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table
9
répondu bhamby 2013-03-21 13:51:59

Ne sais pas si vous avez travaillé dessus, cependant, essayez ceci:

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

Le LPAD est le remplissage gauche, mais la fonction de chiffres était la seule façon que J'ai eu DB2 pour traiter la valeur numérique comme une chaîne.

2
répondu Filipe 2015-04-21 15:17:31

si C'est DB2 pour i, et le type de données myColumn est décimal avec précision (11) et scale (0), alors:

SELECT digits( myColumn ) FROM sysibm.sysdummy1

renvoie:

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

Changer le nombre de zéros peut être fait de plusieurs façons. Le moulage avec une précision différente avant L'utilisation de DIGITS () est une solution.

1
répondu user2338816 2015-04-22 06:46:57

je suis juste allé dans une autre direction: cast(champ de type int)

0
répondu macunte 2013-03-21 02:03:07

Du Numérique 8,0 (datenumfld=20170101)01/01/2017 Cela fonctionne pour moi:

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

Essayez ceci pour votre champ x:

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