Comment convertir une valeur en caractères 00012345678 de DB2 DECIMAL (11) de 12345678
Mon fonction LeftPad sans 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
tester ...
SELECT '32' MY_VALUE, REPEAT('0', 4-length('23'))||CHAR('23') as LEFTPAB_MY_VALUE FROM sysibm.sysdummy1
Utilisez uniquement la fonction DIGITS
, car elle vérifie la longueur du champ numérique ou décimal, etc. et se termine par des zéros à gauche lorsque cela est nécessaire.
SELECT DIGITS(FIELD) FROM ...
Utilisation de http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2.doc.sqlref/castsp.htm pour plus de détails sur CAST
and 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
Je ne sais pas si vous avez réussi, essayez cependant ceci:
SELECT LPAD( DIGITS( fieldName ), 11, '0') ) as paddedFieldName FROM yourTable
Le LPAD est le remplissage à gauche, mais la fonction DIGITS était le seul moyen pour que DB2 traite la valeur numérique comme une chaîne.
S'il s'agit de DB2 pour i et que le type de données myColumn est DECIMAL avec la précision (11) et l'échelle (0), alors:
SELECT digits( myColumn ) FROM sysibm.sysdummy1
retournera:
....+....1.
DIGITS
00001234567
La modification du nombre de zéros non significatifs peut être effectuée de différentes manières. Le réglage à une précision différente avant d’utiliser DIGITS () est un moyen.
Je viens d'aller dans l'autre sens: cast (field as int)
Essayez ceci pour votre champ x:
substr(digits(x), 33 - length(x), length(x) )
SELECT SUBSTRING(
CHAR(100000000000+fieldName),
2,11
) as paddedFieldName
FROM yourTable
Je voulais seulement définir mon champ une fois dans l'instruction select afin que ce qui précède fonctionne pour moi et qu'il soit bien rangé