2010-03-09 2 views
1

Je suis un peu confus sur la fonctionnalité du support REGEX pour MySQL et je n'ai pas encore trouvé un exemple solide sur la façon de séparer un résultat avec REGEX within an sql statement.parse résultats dans MySQL via REGEX

Exemple:

Comment pourrais-je extraire des données à partir d'un e-mails de table qui ressemble à quelque chose comme ...

+-------------------------+ 
|Emails     | 
|-------------------------| 
|[email protected]| 
+-------------------------+ 

et retourner quelque chose à travers une déclaration sql qui ressemble à ...

+------------------------------+ 
|Username | Domain | TLD | 
|-----------|------------|-----| 
|some.email | yourdomain | com | 
+------------------------------+ 
+0

Est-ce utiliser le script MySQL? –

Répondre

8

MySQL n'a pas de fonctionnalité intégrée pour faire ce que vous demandez. Cela serait possible en définissant de nouvelles fonctions, mais il est probablement plus facile de le faire dans n'importe quel langage de programmation dans lequel vous accédez à la base de données.

Pour quelque chose d'aussi simple que d'une adresse e-mail si, vous ne devriez pas avoir besoin d'utiliser des expressions régulières du tout, vous pouvez utiliser le SUBSTRING_INDEX() function, comme:

SELECT 
    SUBSTRING_INDEX(email, '@', 1) AS Username, 
    SUBSTRING_INDEX(SUBSTR(email, LOCATE('@', email)), '.', 1) AS Domain, 
    SUBSTRING_INDEX(email, '.', -1) AS TLD 
FROM users; 

En d'autres termes, c'est:

  • Nom d'utilisateur = tout avant le premier '@'
  • Domaine = tout entre le premier '@' et le premier '.'
  • TLD = tout après le dernier '.'
+0

hmmm, la sous-chaîne du milieu ne retourne rien ... –

+0

Mon erreur, les arguments de 'LOCATE()' sont à rebours, je vais éditer ma réponse pour la réparer. –

+0

merci! J'aime SO, c'est une solution assez simple. –

0

Vous pouvez également essayer,

select substring_index(email, '@', 1) username 
     ,substring_index(substring_index(email, '@', -1), '.',1) domain 
     ,substring_index(email, '.', -1) tld 
from 
(select '[email protected]' email) E 

Utilise seulement SUBSTRING_INDEX. 1st substring_index tout à gauche de '@', 3ème (inner substring_index) à droite de '@' qui ensuite analysé par la 2ème sous-chaîne pour obtenir le domaine, et finalement le dernier tire tout à droite de '.'