sous-chaîne et de la garniture dans Teradata

Je travaille dans Teradata avec des données descriptives qui doit être transformé à partir d'un gerneric varchar(60) dans les différentes longueurs de champ en fonction du type de l'élément de données et la valeur de l'attribut. J'ai donc besoin de prendre tout ce qui est en Varchar(60) et basé sur le champ 'ABCD' agir sur le terrain 'XYZ'. Dans ce cas XYZ est un varchar(3). Pour ce faire, je suis en utilisant le CAS de la logique dans mon select. Ce que je veux faire est

éliminer tous les événements de la non alphabet/données numériques. Tout ce que je veux gauche sont en majuscules Alpha caractères et de chiffres.
Dans ce cas, "Où abcd = "GROUPE", puis xyz doit sortir comme un '000', '002', 'A', 'C'
éliminer un rembourrage supplémentaire
Maj tout Droit

        abcd    xyz
1   GROUP   NULL
2   GROUP   $
3   GROUP   000000000000000000000000000000000000000000000000000000000000
4   GROUP   000000000000000000000000000000000000000000000000000000000002
5   GROUP   A
6   GROUP   C
7   GROUP   r

Pour ce faire, j'ai essayé de GARNITURE et de SUBSTR parmi plusieurs autres choses qui n'ont pas de travail. J'ai collé ce que j'ai à travailler maintenant, mais je ne suis pas fiable à travailler à travers les données à l'intérieur de la sélectionner. Je suis vraiment à la recherche de quelques options sur la façon de mieux travailler avec les chaînes de Teradata. Je travaille de la "SQL Fonctions, Opérateurs, Expressions et les Prédicats" en PDF en ligne. Est-il mieux de référence. Nous sommes sur TD 13

SELECT abcd
        , CASE 
            -- xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            WHEN abcd= 'GROUP'
                THEN(
                    CASE
                        WHEN SUBSTR(tx.abcd,60, 4) = 0
                            THEN (
                                    SUBSTR(tx.abcd,60, 3)
                                        )
                            ELSE
                                TRIM (TRAILING FROM tx.abcd)
                        END
                        )
            END AS abcd

FROM db.descr tx
WHERE tx.abcd IS IN ( 'GROUP')

Le résultat final devrait ressembler à ceci

    abcd    xyz
1   GROUP   000
2   GROUP   002
3   GROUP     A
4   GROUP     C

Je vais avoir à traiter avec environ 60 différents "abcd" types, mais elles doivent toutes être conformes au type de données que je suis actuellement en train de voir.. ie.. mixtes cas, non numérique, non alphabet, collier, etc..

Je sais qu'il ya une meilleure façon, mais je suis venu dans plusieurs cercles à essayer de comprendre ce sur le week-end et ont besoin d'un petit coup de pouce dans la bonne direction.

Merci d'avance,
Pat

InformationsquelleAutor apesa | 2012-09-17