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 - CONVERSION D'UN NOMBRE RÉEL (TYPE DÉCIMALE) EN CARACTÈRES AVEC MISE EN FORME


Information sur la source

Catégorie :Fonctions Classé sous : conversion, nombre, réel, décimal, format Niveau : Débutant Date de création : 04/05/2005 Date de mise à jour : 30/08/2007 14:23:07 Vu : 5 608

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Microsoft SQL Server (UDF)

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


 

Source

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

Historique

04 mai 2005 11:23:07 :
Exemples fournis pour deux types décimaux Dec(18, 2) et Dec(18, 4)
30 août 2007 14:23:07 :
Titre : ajout nom SGBD

Commentaires et avis

signaler à un administrateur
Commentaire de Mindiell le 06/05/2005 12:54:45

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 :) )

signaler à un administrateur
Commentaire de Mindiell le 06/05/2005 12:57:03

ah oui, et pour transformer ton chiffre en 12,8 tu peux faire :

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

;o)

signaler à un administrateur
Commentaire de FENETRES le 09/05/2005 15:28:44

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 !

signaler à un administrateur
Commentaire de Mindiell le 09/05/2005 15:41:15

Il suffit de le dire ^^

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

et hop ! :o)

signaler à un administrateur
Commentaire de FENETRES le 09/05/2005 15:47:46

Encore un petit effort... je ne veux pas des zéros inutiles après la virgule !

signaler à un administrateur
Commentaire de FENETRES le 09/05/2005 16:08:41

OK, pour la conversion en real (mauvaise lecture)

signaler à un administrateur
Commentaire de FENETRES le 09/05/2005 16:26:20

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

signaler à un administrateur
Commentaire de FENETRES le 09/05/2005 16:30:40

Conclusion : tester... toujours tester avant de critiquer.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Reporting services (Format Décimal) [ par vladam ] Bonjour,Un champs Décimal de la base de données m'arrive avec le format 5.25000Je voudrais le reformater pour obtenir 5.25Je pense que je do Conversion de nombre en litteraux [ par anspauldou ] SalutJe voudrai savoir si quelqu'un a déjà un script qui permet de convertir des nombres en litteraux (en fonction definie par l'utilisateur ou procéd nombre de valeurs identiques [ par xantro ] Bonjour à toutes et à tous.Je tiens d'abord à m'excuser pour le nom de ce sujet mais j'ai rien trouvé de mieux pour résumer mon problème, qui est le s SQL 2005 Reporting [ par winterburd ] Bonjour,J'ai un gros problème sur un serveur de PROD.Lorsqu'un utilisateur lance un REPORTING au format Excel (Export) le serveur part dans les tours Nombre de ligne renvoyé par une procédure stockee [ par StephaneNet ] Bonjour,J'ai fait une procédure stocké qui genere dynamiquement du sql et qui est executé à la fin (exec(@sql)). Et j'ai lu que sql server stockait si Conversion en numerique avec virgule [ par fredlevav ] Bonjour,je souhaite convertir une chaine de caractères en décimal. J'utilise la fonction TO_NUMBER de PostgreSQL.Seulement, les chaînes de caractères Foreign Key sous MySql [ par MadM@tt ] Bonjour à tous,Je travaille avec DBDesigner (mais c'est peu important pour la suite). Je viens de réaliser que les clés étrangères n'était pas possibl Format scientifique pour les float [ par amohammed ] Bonjour,J'utilise des procédures stockées pour afficher les résultats de plusieurs formules manipulant des floats à partir de ma base de données.Je so Requête SQL : date au format américain [ par Molenn ] Bonjour, J'ai longtemps hésité entre le forum VB et celui SQL ... J'espère avoir fait le bon choix Je pose vite fait mon problème :Une base SQL Server Nombre de Retard [ par lamziouaq2 ] Bonjour tout le monde !!!!!!!!!!Je Suis en Stage et j'aimerais calculer le nombre de retards d'un employé sachant que je dispose de la base de données


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

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



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,546 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é.