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 |
Partager