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 32 33 34
|
-- Fonction qui permet de récupérer une chaine
-- Retourne la valeur si elle est trouvé ou NULL si @Index supérieur au nombre d'occurence dans @Chaine
CREATE FUNCTION [dbo].[SubVal]
(
@Chaine VarChar(255), -- Chaine contenant les valeurs
@Idx TinyInt, -- Index de la valeur recherchée
@Separateur VarChar(5) = ';' -- Séparateur des valeurs dans la chaine
)
RETURNS VarChar(255)
AS
BEGIN
Declare @Valeur VarChar(255) -- Valeur de retour de la fonction
Declare @Pos Int -- Position du curseur dans la chaine
Declare @Cpt Int -- Compteur
SELECT @Cpt = 1, @Pos = 0, @Valeur=NULL
While (@Cpt < @Idx AND Charindex(@Separateur, @Chaine, @Pos+1)>@Pos)
Begin
SELECT @Cpt=@Cpt+1, @Pos=Charindex(@Separateur, @Chaine, @Pos+1)
End
IF @Cpt=@Idx
SET @Pos = @Pos + 1
IF Charindex(@Separateur, @Chaine, @Pos)>@Pos
SET @Valeur = ltrim(rtrim(Substring(@Chaine, @Pos, Charindex(@Separateur, @Chaine, @Pos)-@Pos)))
ELSE IF Charindex(@Separateur, @Chaine, @Pos)=@Pos
SET @Valeur = ''
ELSE
SET @Valeur = ltrim(rtrim(Substring(@Chaine, @Pos, 255)))
RETURN @Valeur
END |
Partager