Soit la colonne adrel contenant une adresse du type 'prenom.nom.societe@domain.com'.
Si toutes les adrels ont exactement 2 points avant @, on peut extraire '.societe' en charchant la position du second point et de l'@.
Il faut jouer avec les fonctions de chaînes de caractères de Postgresql.
Allons-y progressivement...
1) Position du premier point :
SELECT (POSITION('.' IN adrel)
2) Je garde la partie droite de l'adrel à partir du premier point + 1 caractère, c'est à dire à partir du premier caractère du nom :
SELECT SUBSTRING(adrel FROM POSITION('.' IN adrel) + 1)
3) Position du second point dans la sous-chaîne :
SELECT POSITION('.' IN SUBSTRING(adrel FROM POSITION('.' IN adrel) + 1))
4) Position absolue du second point dans l'adrel :
SELECT POSITION ('.' IN adrel) + POSITION('.' IN SUBSTRING(adrel FROM POSITION('.' IN adrel) + 1))
5) Position de l'@ :
SELECT POSITION('@' IN adrel)
6) Extraction de '.societe' (pour vérification) :
SELECT SUBSTRING (adrel FROM POSITION ('.' IN adrel) + POSITION('.' IN SUBSTRING(adrel FROM POSITION('.' IN adrel) + 1)) FOR POSITION('@' IN adrel))
7) Suppression de .societe en se basant seulement sur la position du second point et de l'@ :
SELECT OVERLAY (adrel PLACING '' FROM POSITION ('.' IN adrel) + POSITION('.' IN SUBSTRING(adrel FROM POSITION('.' IN adrel) + 1)) FOR POSITION('@' IN adrel) - 1)
Je n'ai pas Postgresql installé sur ma machine au boulot pour tester.
Bonne chance !
Partager