Voici une petite fonction qui vous permettra d’extraire les nombres contenus dans une chaîne de caractères, et de les retourner comme un entier…
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 35 36 37 38 | --------------------------------- -- Nicolas SOUQUET - 09/06/2009 - --------------------------------- CREATE FUNCTION dbo.FnTrouveChiffres(@string VARCHAR(1024)) RETURNS INT WITH SCHEMABINDING AS BEGIN DECLARE @result VARCHAR(1024) IF ISNUMERIC(@string) = 1 BEGIN SET @result = @string END ELSE BEGIN DECLARE @i INT, @Lgr INT, @char CHAR(1) SELECT @i = 1, @Lgr = LEN(@string), @result = '' WHILE @i <= @Lgr BEGIN SELECT @char = SUBSTRING(@string, @i, 1) IF ISNUMERIC(@char) = 1 BEGIN SET @result = @result + @char END SET @i = @i + 1 END END RETURN CAST(@result AS INT) END |
Vous pouvez utiliser cette fonction si vous êtes certain que votre chaîne ne contiendra jamais les symboles arithmétiques « + » et « -« .
En effet, la fonction ISNUMERIC() retourne 1 (vrai) pour ces deux symboles.
Il existe une autre solution avec la fonction ASCII() :
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 | --------------------------------- -- Nicolas SOUQUET - 09/06/2009 - --------------------------------- ALTER FUNCTION [dbo].[FnTrouveChiffres](@string VARCHAR(1024)) RETURNS INT WITH SCHEMABINDING AS BEGIN DECLARE @result VARCHAR(1024) DECLARE @i INT, @Lgr INT, @char CHAR(1) SELECT @i = 1, @Lgr = LEN(@string), @result = '' WHILE @i <= @Lgr BEGIN SELECT @char = SUBSTRING(@string, @i, 1) IF ASCII(@char) BETWEEN 48 AND 57 BEGIN SET @result = @result + @char END SET @i = @i + 1 END RETURN CAST(@result AS INT) END |
ElSuket