BI experience

SQL Server : fonction de nettoyage

| 0 Commentaires

Je voulais juste poster un exemple de fonction qui nettoie un varchar pour n’en garder que les numéros et finalement en faire un Integer.

Je me suis basée sur une table ascii pour faire les bons remplacements.

CREATE FUNCTION [dbo].[Nettoyage] (@INPUT VARCHAR(100))

RETURNS int
AS
BEGIN
DECLARE @OUTPUT                 INTEGER
DECLARE @Id                              INTEGER
DECLARE @Taille_output         INTEGER
DECLARE @Champ_travail      VARCHAR(100)
DECLARE @Champ_travail2    VARCHAR(100)
DECLARE @PremierPassage     INTEGER
DECLARE @i                                 INTEGER
DECLARE @flag                            INTEGER

SET @i = 32
SET @Taille_output = 0
SET @Champ_travail2 =  »
SET @OUTPUT = 0
SET @PremierPassage = 0
SET @flag = 0

/* si mon champ est null*/
IF @INPUT IS NULL
BEGIN
SET @Id = NULL
GOTO Fin
END

/*1er passage*/
if(@PremierPassage = 0)
begin
SET @Champ_travail = REPLACE (@input,char(@i), »)
SET @Champ_travail2 =@Champ_travail
SET @i = 33
SET @PremierPassage = 1
end
/*1ere partie des caractères ascii qu’on ne veut pas*/
begin
while @i<=47
begin
SET @Champ_travail = REPLACE (@Champ_travail2,char(@i), »)
SET @Champ_travail2 =@Champ_travail
SET @i = @i+1
end
SET @i = 58
end

/*2eme partie des caractères ascii qu’on ne veut pas*/
begin
while @i<=127
begin
SET @Champ_travail = REPLACE (@Champ_travail2,char(@i), »)
SET @Champ_travail2 =@Champ_travail
SET @i = @i+1
end
end

SET @Taille_output = LEN(@Champ_travail2)
SET @flag = isnumeric(@Champ_travail2)
Fin:
if @flag = 1
begin
if CAST (ltrim(rtrim(@Champ_travail2))as NUMERIC) <= 2147483647
begin
SET @OUTPUT =CAST (ltrim(rtrim(@Champ_travail2))as INTEGER)
end
else
SET @OUTPUT = 0
end
else
SET @OUTPUT = 0

RETURN @OUTPUT

END

Si vous avez des conseils, n’hésitez pas à laisser un commentaire…

Laisser un commentaire

Champs Requis *.

*