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…