Bonjour à tous,
J'ai une table sql qui contient 2 champs :
ID int
ADRESSE varchar(MAX)
le champ ADRESSE contient des adresses mails séparées par des ; (en nombre variable et de longueur variable)
Je cherche désespérément à faire une requête qui m'extrait les adresses mails exploitables :
exemple de contenu de ma table :
1 toto@yahoo.fr;titi@gmail.fr;tata@yahoo.fr
2 tutu@gmail.fr;toto@yahoo.fr
...
résultat escompté :
1 toto@yahoo.fr
1 titi@gmail.fr
1 tata@yahoo.fr
2 tutu@gmail.fr
2 toto@yahoo.fr
j'ai bien trouvé sur le net un exemple de fonction qui split un champ mais je n'arrive à le faire fonctionner que sur une ligne de la manière suivante :
la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 declare @des varchar(max) = (SELECT top 1 [ADRESSE] FROM matable) SELECT * FROM fctSplitToChar(@des, ';')
impossible de la faire fonctionner dans une requête sur l'ensemble des lignes de ma table, j'ai essayé la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ALTER FUNCTION [fctSplitToChar]( @DelimitedText VARCHAR(MAX), -- liste CSV @QuoteChar CHAR(1) -- caractère de délimitation ) RETURNS @Items TABLE (Item VARCHAR(MAX)) BEGIN DECLARE @Item VARCHAR(MAX) WHILE CHARINDEX(@QuoteChar, @DelimitedText, 0) <> 0 BEGIN SELECT @Item=SUBSTRING(@DelimitedText,1,CHARINDEX(@QuoteChar,@DelimitedText, 0)-1), @DelimitedText=SUBSTRING(@DelimitedText,CHARINDEX(@QuoteChar,@DelimitedText, 0) + LEN(@QuoteChar), LEN(@DelimitedText)) IF LEN(RTRIM(@Item)) > 0 INSERT INTO @Items SELECT CONVERT(VARCHAR, @Item) END -- Dernier item de la liste IF LEN(RTRIM(@DelimitedText)) > 0 INSERT INTO @Items SELECT CONVERT(VARCHAR, @DelimitedText) RETURN END
mais ça me renvoie une erreur Syntaxe incorrecte vers '.'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT a.ID, b.Item FROM matable a CROSS APPLY fctSplitToChar(a.ADRESSE, ';') AS b
Merci d'avance de vos réponses.
Partager