Bonjour,

Voilà j'écrivais fièrement une fonction d'extraction de chaines en fonction d'un séparateur et d'un indice... Demandez pas pourquoi j'ai trop honte.

Le fait c'est que j'ai trouvé tellement d'aide sur ce forum que je me suis dit pourquoi pas partager ...

Alors voilà, si un jour ça sert à qqun.

Elle est facilement modifiable pour avoir toute la liste.


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
19
20
21
22
23
24
25
26
27
28
29
30
31
-- =============================================
-- Author:		Juan Jimenez
-- Create date: 08.08.2014
-- Description:	Extraction de chaine a l'indice spécifié avec le séparateur spécifié
-- =============================================
CREATE FUNCTION fExtraitChaine 
(
	@Texte varchar(max),
	@Indice int,
	@Separateur varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
	Declare @Resultat varchar(max);
	With Split AS
				(
					Select CASE CHARINDEX(@Separateur,@Texte,1) WHEN 0 THEN '' ELSE Substring(@Texte,1,CHARINDEX(@Separateur,@Texte,1)-1) END  Element, Substring(@Texte,CHARINDEX(@Separateur,@Texte,1)+len(@Separateur),len(@Texte)) Rest,CHARINDEX(@Separateur,@Texte,1) Pos,1 ID
					UNION ALL
					SELECT CASE CHARINDEX(@Separateur,R.Rest,1) WHEN 0 THEN R.Rest ELSE Substring(R.Rest,1,CHARINDEX(@Separateur,R.Rest,1)-1) END Element, Substring(R.Rest,CHARINDEX(@Separateur,R.Rest,1)+len(@Separateur),len(R.Rest)) Rest,CHARINDEX(@Separateur,R.Rest,1) Pos,R.Id+1 ID
					FROM (Values(1)) Tbl(Bidon)
					INNER JOIN Split R on 1 = 1 AND R.Element<>R.Rest
					WHERE R.Id+1<=@Indice
				)
	Select @Resultat = Element
	from Split
	Where CHARINDEX(@Separateur,@Texte,1)<> 0 and Id=@Indice
 
	RETURN @Resultat
END
GO