2014-05-14 3 views
2

Tableau A
Id varchar (30)zéro padding dans teradata sql

Je suis en train de recréer une logique où je dois utiliser 9 chiffres Ids quelle que soit la longueur réelle de la valeur de l'ID champ.
Ainsi, par exemple, si l'ID est de longueur 6, j'ai besoin de gauche avec 3 zéros en tête. La longueur réelle peut être n'importe quoi allant de 1 à 9.

Des idées pour implémenter ceci dans Teradata SQL?

Répondre

9

Si la longueur réelle est de 1 à 9 caractères, pourquoi la colonne est définie comme VarCar (30)?

Si elle était une colonne numérique, il serait facile:

CAST(CAST(numeric_col AS FORMAT '9(9)') AS CHAR(9)) 

Pour les chaînes il n'y a pas de format comme ça, mais en fonction de votre version que vous pourriez avoir une fonction LPAD:

LPAD(string_col, 9, '0') 

Dans le cas contraire c'est:

SUBSTRING('000000000' FROM CHAR_LENGTH(string_col)+1) || string_col, 

S'il y a plus de neuf caractères tous les calculs précédents seront retourne les.

Si vous voulez tronquer (ou CHAR au lieu d'un résultat VARCHAR) vous devez ajouter une finale CAST AS CHAR(9)

Et enfin, s'il y a d'attaque ou les espaces de fin, vous pouvez utiliser TRIM(string_col)

+0

SUBSTRING ('000000000' FROM CHAR_LENGTH (string_col) +1) || string_col a travaillé pour moi. Merci! – HuckIt

+0

@dnoeth: Pouvez-vous expliquer la syntaxe 'AS FORMAT '9 (9)''? – Jubbles

+2

@Jubbles: C'est le style Cobol, '9' signifie inclure des zéros et' (9) 'répète le caractère de formatage précédent 9 fois, donc c'est la même chose que' 999999999'. Voir http://www.info.teradata.com/htmlpubs/DB_TTU_14_00/index.html#page/SQL_Reference/B035_1143_111A/ch09.051.40.html#ww13915817 – dnoeth