web-dev-qa-db-fra.com

DB2 SQL convertit les décimales en caractères avec des zéros

Comment convertir une valeur en caractères 00012345678 de DB2 DECIMAL (11) de 12345678

12
macunte

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
0
Adam111p

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 ...
14
kelgwiin

D'après votre commentaire dans la réponse de @Mr Fuzzy Botton, je suppose que vous êtes sur DB2 for i , qui ne possède pas la fonction LPAD. Vous pourriez plutôt utiliser une combinaison des fonctions REPEAT et RIGHT :

SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table
9
bhamby

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

9
AjV Jsy

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.

2
Filipe

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.

1
user2338816

Je viens d'aller dans l'autre sens: cast (field as int) 

0
macunte

Essayez ceci pour votre champ x:

substr(digits(x), 33 - length(x), length(x) )
0
funnyfish
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é

0
user10629183