Récupérer nom de domaine

Fermé
micka72 - 4 janv. 2014 à 17:26
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 6 janv. 2014 à 12:59
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

heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 139
5 janv. 2014 à 20:20
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
merci de votre réponse, je ne comprends pas le "from locate"

Erreur : "ERROR: function locate(unknown, character varying) does not exist"
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 139
Modifié par heliconius le 5/01/2014 à 23:53
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
Merci beaucoup, c'est très clair.
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 139
6 janv. 2014 à 12:59
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