Mon but ultime est de chercher si le champ CHAMP ne contient que des chiffres : en faisant un RTRIM et en comparant la longueur à 0, ça semble fonctionner.
Pour ceci
1 2
| LTRIM(champ, '0123456789') IS NULL -- n'a pas autre chose que des chiffres
AND champ IS NOT NULL -- contient au moins un caractère |
Pour le TRANSLATE (p1, p2, p3) : Les 3 sont obligatoires.
Remplace dans la chaine p1, le premier caractère de p2 par le premier caractère de p3, le second de p2 par le second de p3, etc..
Si pour un xème caractère de p2, il n'y a pas de xème caractère dans p3, alors le xème caractère de p2 est supprimé dans p1 (remplacé par NULL)
select CHAMP, TRANSLATE(CHAMP, '*', '0123456789') t1, TRANSLATE(CHAMP, '*', ' 0123456789') t2 from DWH.TABLE
t1 : Transforme tous tes '*' par '0'
t2 : transforme toutes tes '*' par ' '
Mais c'est mal formé, les caractères '123456789' de t1 sont inutiles et le caractères '0123456789' sont inutiles
Exemple :
1 2 3 4
| p2 : '0123456789'
p3 : 'abcdefghi'
0->a; 1->b, 2->c, 3->d, 4->e, 5->f, 6->g, 7->h, 8->i, 9->supprimé |
Le principal intérêt du translate est le multi replace
TRANSLATE(champ, '012', 'abc') = REPLACE(REPLACE(REPLACE(champ, '0', 'a'), '1','b'), '2','c')
Et aussi de pouvoir enlever des caractères dans des chaines (p3 étant obligatoire, il faut forcément remplacer au moins un caractère que tu souhaites garder)
Exemple enlever tous les chiffres d'une chaîne :
TRANSLATE('jour : 25/09/2019', ' 0123456789', ' ')
Et pour finir (astuce vu sur le forum) : Pour ne garder que les caractères souhaités (exemple que les chiffres) : On fait la liste de tous les caractères autres que ceux qu'on veut garder et ce sera une liste des caractères à supprimer.
double translate
1 2 3 4 5 6 7 8 9
| TRANSLATE('jour : 25/09/2019', '0' || TRANSLATE('jour : 25/09/2019', '0123456789', '0'),'0')
TRANSLATE('jour : 25/09/2019', '0123456789', '0') : On remplace tous les 0 par 0 et on supprime tous les 1-9
La chaine sera 'jour : /0/0'
Ensuite on retranslate sur le résultat
TRANSLATE('jour : 25/09/2019', '0jour : /0/0','0') : On remplace tous les 0 par 0, et on supprime les autres caractères (j, o, u, r, <espace>, :, /) .
Résultat 25092019 |
Partager