Sql server - conversion d'un nombre réel (type décimale) en caractères avec mise en forme

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 751 fois - Téléchargée 30 fois

Contenu du snippet

Microsoft SQL Server (UDF)

Fonction de conversion d'un nombre réel en caractères avec mise en forme.

Source / Exemple :


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE Function [dbo].[fctDec2ToStr] (@Num Dec(18, 2))
Returns Varchar(19)
/* 
   Cette fonction de conversion retourne une chaîne de caractères
   comprenant la valeur du nombre réel passé en paramètre. 
   Sauf à arrondir un nombre, il est recommandé d'utiliser des types
   décimaux identiques en entrée et en sortie.
   Exemples :
      -- Appel                                                                                    -- Résultat
      Select dbo.fctDec2ToStr(1234567890123456)              12345678901234            (18 - 2 = 16 de chiffres max. devant la virgule)
      Select dbo.fctDec2ToStr(12345678901234.12)             12345678901234,12       (Mise en forme usuelle)
      Select dbo.fctDec2ToStr(.12)                                             0,12                                   (Idem)
      Select dbo.fctDec2ToStr(.125)                                           0,13                                   (Arrondi dû à l'échelle décimale)

  • /
Begin Declare @Pos Tinyint Declare @DecVal Varchar(2) Declare @Str Varchar(19) -- Conversion en chaîne de caractères Set @Str=Cast(@Num As Varchar(19)) -- Position du séparateur décimale Set @Pos=Charindex('.', @Str, 1) -- Cas triviaux If @Pos is null Return '' Else If @Pos=0 Return @Str -- Partie décimale Set @DecVal=Substring(@Str, @Pos +1, Len(@Str) - @Pos) -- Supprime les zéros inutiles après la virgule While (Right(@DecVal, 1) = '0') Set @DecVal=Left(@DecVal, Len(@DecVal) - 1) -- Retourne un nombre entier If @DecVal='' Return Substring(@Str, 1, @Pos -1) -- Retourne un nombre réel Return Substring(@Str, 1, @Pos -1) + ',' + @DecVal End ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CREATE Function [dbo].[fctDec4ToStr] (@Num Dec(18, 4)) Returns Varchar(19) /* Cette fonction de conversion retourne une chaîne de caractères comprenant la valeur du nombre réel passé en paramètre. Sauf à arrondir un nombre, il est recommandé d'utiliser des types décimaux identiques en entrée et en sortie. Exemples : -- Appel -- Résultat Select dbo.fctDec4ToStr(12345678901234) 12345678901234 (18 - 4 = 14 de chiffres max. devant la virgule) Select dbo.fctDec4ToStr(12345678901234.12) 12345678901234,12 (Mise en forme usuelle) Select dbo.fctDec4ToStr(.1234) 0,1234 (Idem) Select dbo.fctDec4ToStr(.12345) 0,1235 (Arrondi dû à l'échelle décimale)
  • /
Begin Declare @Pos Tinyint Declare @DecVal Varchar(4) Declare @Str Varchar(19) -- Conversion en chaîne de caractères Set @Str=Cast(@Num As Varchar(19)) -- Position du séparateur décimale Set @Pos=Charindex('.', @Str, 1) -- Cas triviaux If @Pos is null Return '' Else If @Pos=0 Return @Str -- Partie décimale Set @DecVal=Substring(@Str, @Pos +1, Len(@Str) - @Pos) -- Supprime les zéros inutiles après la virgule While (Right(@DecVal, 1) = '0') Set @DecVal=Left(@DecVal, Len(@DecVal) - 1) -- Retourne un nombre entier If @DecVal='' Return Substring(@Str, 1, @Pos -1) -- Retourne un nombre réel Return Substring(@Str, 1, @Pos -1) + ',' + @DecVal End -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

A voir également

Ajouter un commentaire Commentaires
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
9 mai 2005 à 16:30
Conclusion : tester... toujours tester avant de critiquer.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
9 mai 2005 à 16:26
Toutefois la conversion n'est pas sans incidence !

Petite différence à signaler :

select replace (cast ( cast(12345678.2 as real) as varchar), '.', ',') -- retourne 1,23457e+007
select dbo.fn_Dec2ToStr(12345678.2) --retourne 12345678,2
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
9 mai 2005 à 16:08
OK, pour la conversion en real (mauvaise lecture)
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
9 mai 2005 à 15:47
Encore un petit effort... je ne veux pas des zéros inutiles après la virgule !
Mindiell Messages postés 559 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
9 mai 2005 à 15:41
Il suffit de le dire ^^

select replace (cast ( cast(1.20 as real) as nvarchar), '.', ',')

et hop ! :o)
Afficher les 8 commentaires

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.