J'essaie de standardiser l'adresse e-mail dans un champ. Voici quelques exemples couple du problème que je tente de résoudre:Comment trouver et supprimer un jeton de courrier électronique d'une série d'e-mails dans T-SQL?
ex 1 [email protected];[email protected];[email protected]
ex 2 [email protected];[email protected];[email protected]
ex 3 [email protected];[email protected];[email protected];[email protected]
` Je suis en train d'extraire le courrier électronique utilisable à partir du e-mails générés automatiquement dans des chaînes similaires à cela, donc par exemple dans
(ex 1) Je voudrais l'adresse @ aol.com;
dans (ex 2) Je voudrais l'adresse @ gmail.com;
dans (ex 3) Je voudrais l'adresse @ comcast.net.
J'ai essayé de trouver le charindex des fournisseurs de services les plus populaires en utilisant une déclaration de cas, mais comme je ne sais pas combien de caractères existent avant le symbole @ je ne sais pas comment utiliser la méthode de sous-chaîne.
Il peut y avoir de 2 à 7 emails dans une chaîne. Je sais comment faire pour 2. C'était facile, mais après ça je n'en ai aucune idée. Voici ce que j'ai jusqu'à présent:
select email, len(email) - len(replace(email,';','')) num_semi
into #tmp1
from staging_transformations
where email != ''
order by len(email) - len(replace(email,';','')) desc
select email,
case
when num_semi = 1 then
case
when SUBSTRING(email,0,charindex(';',email)) like '%@anon.cargurus.com' then
case
when SUBSTRING(email,charindex(';',email) + 1,len(email)) like '%@anon.cargurus.com' then NULL
else SUBSTRING(email,charindex(';',email) + 1,len(email))
end
when SUBSTRING(email,0,charindex(';',email)) like '%@geico.zagdealer.com' then
case
when SUBSTRING(email,charindex(';',email) + 1,len(email)) like '%@geico.zagdealer.com' then NULL
else SUBSTRING(email,charindex(';',email) + 1,len(email))
end
when SUBSTRING(email,0,charindex(';',email)) like '%@truecarcustomer.com' then
case
when SUBSTRING(email,charindex(';',email) + 1,len(email)) like '%@truecarcustomer.com' then NULL
else SUBSTRING(email,charindex(';',email) + 1,len(email))
end
when SUBSTRING(email,0,charindex(';',email)) like '%@carbuyingemail.com' then
case
when SUBSTRING(email,charindex(';',email) + 1,len(email)) like '%@carbuyingemail.com' then NULL
else SUBSTRING(email,charindex(';',email) + 1,len(email))
end
else SUBSTRING(email,0,charindex(';',email))
end
else email
end test,
num_semi
from #tmp1
J'utilise T-SQL. Aucune suggestion?
si vous utilisez CHARINDEX pour trouver la position et comcast.net (par exemple) - alors vous prenez à gauche de la chaîne jusqu'à ce point - alors vous inversez la chaîne et utilisez CHARINDEX sur cela pour trouver le ';' - alors vous prenez LEFT jusqu'à ce point - alors vous avez la partie EMAIL (mais il est inversé (donc utilisez REVERSE sur cela et retournez-le à & comcast.net - vous feriez mieux de faire une fonction scalaire, où vous pouvez utiliser des variables et faire un mini-programme - je devais utiliser l'esperluette à la place de le caractère AT BTW du e à cet endroit – Cato
Quel est le problème avec l'autre adresse e-mail? –
@JuanCarlosOropeza Ils sont similaires aux adresses e-mail générées automatiquement lorsque vous répondez à une annonce Craigslist. Pour autant que je sache, ces adresses e-mail sont des adresses e-mail "pas de réponse". – jimjim