Sql server - obtenir la position du premier chiffre d'une chaine de characteres

Contenu du snippet

Dans certains projets, on se trouve avec des données différentes qui sont mixées dans une colonne définie d'une table de base de données.
Ainsi, cette fonction permet de retrouver la position du premier chiffre d'une chaine.

Source / Exemple :


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
---------------------------------------------------------------

CREATE FUNCTION [dbo].[FN_CHARINDEX_FIRST_NUMERIC] (@NOMDIV nvarchar(30))
RETURNS smallint

AS

BEGIN

	DECLARE @nom nvarchar(30)
	DECLARE @i smallint
	DECLARE @j smallint
	SET @i = 1
	SET @j = 0

	WHILE @i < len(@nomdiv)
	BEGIN
		DECLARE @car nvarchar(1)
		SET @car = (SUBSTRING(@NOMDIV, @i, @i) )
		IF @car IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0')
		BEGIN
			SET @j = @i
			BREAK
		END
		ELSE 
			SET @i = @i + 1
	END

RETURN @j
END
---------------------------------------------------------------
-- Une seconde solution fournie par Christian plus performante

CREATE FUNCTION [dbo].[FN_CHARINDEX_FIRST_NUMERIC_V2] (@NOMDIV nvarchar(30))
RETURNS smallint

AS

BEGIN

  RETURN PATINDEX ('%[0123456789]%', @NOMDIV)

END

Conclusion :


Merci à Gabrielle et Christian pour les astuces.

Bon coding

Romelard Fabrice [MVP]

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.