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
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
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 ...
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
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 RIGHT
fonctions:
SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table
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.
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.
je suis juste allé dans une autre direction: cast(champ de type int)
Du Numérique 8,0 (datenumfld=20170101)01/01/2017
Cela fonctionne pour moi:
DATE(TO_DATE(CHAR(datenumfld), 'YYYYMMDD')) as YourDate
Essayez ceci pour votre champ x:
substr(digits(x), 33 - length(x), length(x) )