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 306 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

Mindiell
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1 -
J'ai mis 3, la source est intéressante, mais si tu fais :

cast (monnombre as nvarchar)

c'est plus efficace (ou alors j'ai rien compris :) )
Mindiell
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1 -
ah oui, et pour transformer ton chiffre en 12,8 tu peux faire :

cast ( cast(.125 as dec(18,2)) as nvarchar)

;o)
FENETRES
Messages postés
205
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
Effectivement, sauf que je veux en retour la valeur avec la virgule et sans le niveau de précision (échelle) car, dans mon cas précis, j'effectue un import direct à partir d'Excel (données externes).

Différences :

select cast(1.20 as varchar(19)) -- retourne '1.20'

select dbo.fn_Dec2ToStr(1.20) -- retourne '1,2'

Alors, effectivement, c'est très spécifique !
Mindiell
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)
FENETRES
Messages postés
205
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 !

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.