Récupérer nom de domaine

micka72 -  
heliconius Messages postés 584 Statut Membre -
Bonjour à tous,

Je souhaite récupérer depuis une colonne email, uniquement le nom de domaine exemple : pour une adresse ***@***, je souhaite avoir comme résultat "monnomdedoamine.com", j'ai réussi à tester que mon adresse est valide ok. Je pense utiliser la fonction SUBSTRING mais je n'arrive pas à trouver la syntaxe exacte.

Merci d'avance

2 réponses

  1. heliconius Messages postés 584 Statut Membre 143
     
    Bonsoir,

    Je pars du principe, pour l'exemple fourni, que tu as une table "Clients" avec les champs : nom, prenom, mail.

    SELECT
      nom,
      prenom,
      mail,
      substring(mail from locate('@', mail)+1) AS domaine
    FROM
      Clients
    WHERE
      mail != '';

    0
    1. micka72
       
      merci de votre réponse, je ne comprends pas le "from locate"

      Erreur : "ERROR: function locate(unknown, character varying) does not exist"
      0
  2. heliconius Messages postés 584 Statut Membre 143
     
    Re-bonsoir,

    La fonction MySQL locate('@', mail) donne la position du caractère '@' dans le champ mail soit, par exemple, 7 pour l'enregistrement n° 2 (lduval@hotmail.com). C'est à dire que le premier caractère du nom de domaine est à la position 8.

    La fonction substring(mail from 8) va fournir tous les caractères du champ mail à partir du 8ème caractère.

    Comme 8 peut être remplacé par locate('@', mail)+1, en effectuant la substitution on obtient substring(mail from locate('@', mail)+1).
    NB: Pour chaque enregistrement la position du caractère '@' sera calculée.

    Le AS domaine rajouté à la suite ne sert pour que donner un nom à la colonne.

    Tu trouveras ci-dessous les sorties d'un script :
    - la création d'une table Clients,
    - la saisie d'enregistrements (1 avec le mail vide)
    - l'affichage du contenu de la table
    - l'affichage des champs et du nom de domaine (si adresse mail)

    mysql> DROP TABLE IF EXISTS Clients;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> CREATE TABLE Clients(
        ->   nom varchar(25) not null,
        ->   prenom varchar(25) not null,
        ->   mail varchar(45) not null
        -> ) type=MyISAM comment='Table de clients';
    
    INSERT INTO Clients VALUES('DUPONT','Marc','marc.moreau@free.fr');
    INSERT INTO Clients VALUES('DUVAL','Lou','lduval@hotmail.com');
    INSERT INTO Clients VALUES('KERGROACH','Gwennaig','');
    INSERT INTO Clients VALUES('MOREAU','Jean','jmoreau@wanadoo.fr');
    Query OK, 0 rows affected, 1 warning (0.08 sec)
    
    mysql>
    mysql> INSERT INTO Clients VALUES('DUPONT','Marc','marc.moreau@free.fr');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO Clients VALUES('DUVAL','Lou','lduval@hotmail.com');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO Clients VALUES('KERGROACH','Gwennaig','');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO Clients VALUES('MOREAU','Jean','jmoreau@wanadoo.fr');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO Clients VALUES('MARTIN','Denise','dmartin@free.fr');
    Query OK, 1 row affected (0.00 sec)
    
    mysql>
    mysql> SELECT * FROM Clients;
    +-----------+-----------+----------------------+
    | nom       | prenom    | mail                 |
    +-----------+-----------+----------------------+
    | DUPONT    | Marc      | marc.moreau@free.fr  |
    | DUVAL     | Lou       | lduval@hotmail.com   |
    | KERGROACH | Gwennaig  |                      |
    | MOREAU    | Jean      | jmoreau@wanadoo.fr   |
    | MARTIN    | Denise    | dmartin@free.fr      |
    +-----------+-----------+----------------------+
    5 rows in set (0.00 sec)
    
    mysql>
    mysql> SELECT
        ->   nom,
        ->   prenom,
        ->   mail,
        ->   substring(mail from locate('@',mail)+1) AS domaine
        -> FROM
        ->   Clients
        -> WHERE
        ->   mail != '';
    +--------+-----------+----------------------+-------------+
    | nom    | prenom    | mail                 | domaine     |
    +--------+-----------+----------------------+-------------+
    | DUPONT | Marc      | marc.moreau@free.fr  | free.fr     |
    | DUVAL  | Lou       | lduval@hotmail.com   | hotmail.com |
    | MOREAU | Jean      | jmoreau@wanadoo.fr   | wanadoo.fr  |
    | MARTIN | Denise    | dmartin@free.fr      | free.fr     |
    +--------+-----------+----------------------+-------------+
    4 rows in set (0.00 sec)

    Est-ce que c'est plus clair maintenant ? :o)

    Je ne sais pas quel est ton environnement de travail mais le script ci-dessous a été exécuté avec le client mysql dans l'environnement suivant :

    OS:    Debian GNU/Linux 5.0
    mysql: Ver 14.12 Distrib 5.0.51a
    MySQL: Server version: 5.0.51a-24+lenny5 (Debian)


    Script :

    DROP TABLE IF EXISTS Clients;
    CREATE TABLE Clients(
      nom varchar(25) not null,
      prenom varchar(25) not null,
      mail varchar(45) not null
    ) type=MyISAM comment='Table de clients';
    
    INSERT INTO Clients VALUES('DUPONT','Marc','marc.moreau@free.fr');
    INSERT INTO Clients VALUES('DUVAL','Lou','lduval@hotmail.com');
    INSERT INTO Clients VALUES('KERGROACH','Gwennaig','');
    INSERT INTO Clients VALUES('MOREAU','Jean','jmoreau@wanadoo.fr');
    INSERT INTO Clients VALUES('MARTIN','Denise','dmartin@free.fr');
    
    SELECT * FROM Clients;
    
    SELECT
      nom,
      prenom,
      mail,
      substring(mail from locate('@',mail)+1) AS domaine
    FROM
      Clients
    WHERE
      mail != '';

    Un problème sans solution est un problème mal posé. (Albert Einstein)
    0
    1. micka72
       
      Merci beaucoup, c'est très clair.
      0
    2. heliconius Messages postés 584 Statut Membre 143
       
      Si cette réponse a résolu ton problème, merci de la cocher avec [Résolu]. Pense aux autres qui cherchent peut-être à résoudre le même problème que toi...
      0