test

CREATE FUNCTION dbo.F_MULTIPARSE(@PHRASE VARCHAR(ma
x),
@PARSEC VARCHAR(25
6))
RETURNS @T TABLE (POS INT,
MOT VARCHAR(128),
CHR CHAR(1))
AS
/**************************************************
****************************
* Fonction table de découpage à césure multiple
*
***************************************************
****************************
* Fred. Brouard - http://sqlpro.developpez.com - ww
w.sqlspot.com - 2009-04-17 *
***************************************************
***************************/
BEGIN
-- effets de bord
IF @PHRASE IS NULL RETURN;
IF COALESCE(@PARSEC, '') = ''
BEGIN
INSERT INTO @T VALUES (1, @PHRASE, NULL);
RETURN;
END;
-- variables locales
DECLARE @C CHAR(1), -- lettre analysée
@MOT VARCHAR(128), -- mot découpé
@I INT, -- boucle sur phrase
@J INT, -- boucle sur caractère
de césure
@JMIN INT, -- premier caractère de
césure dans phrase
@IC INT,
@M INT;
SELECT @I = 1, @M = 1, @MOT = '';
-- boucle sur phrase
WHILE @I <= LEN(@PHRASE)
BEGIN
-- on lit le premier caractère de la phrase
SET @C = SUBSTRING(@PHRASE, @I, 1);
-- on regarde si c'est un caractère de césure
SET @IC = CHARINDEX(@C, @PARSEC);
-- si c'est un caractère de césure...
IF @IC > 0
BEGIN
-- si le mot n'est pas vide
IF @MOT <> ''
BEGIN
-- on insère le mot
INSERT INTO @T VALUES (@M, LTRIM(@MOT), @C
);
-- on incrémente le compteur de mot et on
réinitialise le mot
SELECT @M = @M + 1, @MOT = '';
END;
END;
ELSE
SET @MOT = @MOT + @C;
SET @I = @I + 1;
END;
-- insertion du dernier mot
IF @MOT <> ''
INSERT INTO @T VALUES (@M, @MOT, NULL);
RETURN
END
GO

Laisser un commentaire