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 18 624 fois - Téléchargée 28 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

Messages postés
196
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009

Conclusion : tester... toujours tester avant de critiquer.
Messages postés
196
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009

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
Messages postés
196
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009

OK, pour la conversion en real (mauvaise lecture)
Messages postés
196
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009

Encore un petit effort... je ne veux pas des zéros inutiles après la virgule !
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
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.