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 : 4 782

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]
 

Historique

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

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

convertir string en money [ par chris81 ] comment puis je faire pour convertir un string pour l'inserer dans mon champ de type moneymercihttp://www.correzeweb.comhttp://www.localetv.com Comment ignorer un chiffre pour un tri alphabétique ? [ par tony_montana28 ] Bonjour,Je cherche a trier une table Access pour l'&#233;dition d'un &#233;tat, mais le champ &#224; trier poss&#232;de parfois un chiffre au d&#233;b Binary 16 to String [ par vapo ] Bonjour, Je m'explique, j'aimerai dans une proc&#233;dure stock&#233;e&nbsp; (SQLServer 2000)&nbsp; faire une copie de donn&#233;es&nbsp; d'une table Transformation d'un binary16 eb String.... [ par vapo ] Bonjour, Je m'explique, j'aimerai dans une requ&#234;te SQL (SQLServer 2000)&nbsp; faire une copie de donn&#233;es&nbsp; d'une table vers une autre, test si string (datetime) est correct. [ par tmcuh ] Voil&#224; un big soucis avec SQL. Je r&#233;cup&#232;re une donn&#233;e de type char[10] provenant d'une table (qui ne m'appartient pas) et je dois t inserer Html dans une Table SQL [ par blueangel ] Bonjour tout le monde,Voila je veux inserer dans une table "maTable" dans SqlServer du string qui contient du html alors quand la taille du html est r Requete pour savoir par quel chiffre commence un champ [ par romagnoli64 ] Bonsoir,voil&#224; j'ai une base de donn&#233;es (sous Access 97) et j'ai un champ qui commence par des chiffres suivis d'un slash / .Et j'aimerais r& Un commande avec un String contenant un ' [ par forum_ma ] Bonjour je fais un programme en VB.net, je passe une commande a ma base de donn&#233;e, dans cette commande il y a un champ texte, lorsque le texte co Clés Primaire en VARCHAR [ par ffert ] Bonjour, Je souhaite créer des clés primaires en VARCHAR(30), mais j'ai peur que ce soit plus lent qu'avec un INTEGER ou un INTEGER Autoincrémental. s Problème requête UPDATE. [ par woot6768 ] Bonjour,J'ai un soucis avec une requête UPDATE, je vous fournis le code correspondant (codé en c#) :string lineCmd = "UPDAT


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.