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]
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.