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
Vous devez vous connecter pour publier un commentaire.
SQL ci-dessous utilise la CHARACTER_LENGTH fonction d'abord de déterminer s'il est nécessaire d'effectuer ce qui équivaut à un DROIT(tx.xyz, 3) en utilisant les fonctions natives de Teradata 13.x. Je pense que cela peut accomplir ce que vous cherchez à faire. J'espère que je n'ai pas mal interprété votre explication:
EDIT: Fixe parenthèse dans la sous-CHAÎNE