begin process at 2008 08 08 23:15:19
1 223 648 membres
406 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER - OBTENIR LA POSITION DU PREMIER CHIFFRE D'UNE CHAINE DE CHARACTERES


Information sur la source

Catégorie :Fonctions Classé sous : chiffre, position, string, integer Niveau : Initié Date de création : 17/04/2007 Date de mise à jour : 20/04/2007 17:26:07 Vu : 3 418

Note :
4 / 10 - par 1 personne
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


Description

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

  • 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
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]
17 avril 2007 11:56:16 :
Modification en cas d'absence
20 avril 2007 17:26:07 :
Modification suite à la requête fournie par Christian
    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS