begin process at 2012 05 25 12:04:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fonctions

 > SQL SERVER - CONVERSION D'UN NOMBRE RÉEL (TYPE DÉCIMALE) EN CARACTÈRES AVEC MISE EN FORME

SQL SERVER - CONVERSION D'UN NOMBRE RÉEL (TYPE DÉCIMALE) EN CARACTÈRES AVEC MISE EN FORME


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :14 402

Auteur : FENETRES

Ecrire un message privé
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

 Sources du même auteur

Source avec Zip Source avec une capture SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATIO...
Source avec Zip Source avec une capture SQL SERVER - PROCEDURE D'EDITION D'UN FICHIER PLAT (EXPORT C...
Source avec une capture SQL SERVER - TRANSMISSION D'UN PARAMETRE A VALEURS MULTIPLES
Source avec une capture SQL SERVER 2005 - GESTION DE LA LARGEUR DES COLONNES D'UNE R...
SQL SERVER - OBTENIR LA DATE DU DERNIER JOUR DU MOIS (GET LA...

 Sources de la même categorie

Source avec Zip CONVERT NUMBER TO LETTERS par oumaya2007
Source avec Zip CALCUL UNE DIFFÉRENCE DE DATE EN FONCTION DE JOURS FÉRIÉS/TR... par Sieurcoug
Source avec Zip CONVERSION DE NOMBRE EN LETTRES (SQL) par wormlore
NO HTML BALISE [MYSQL] par abdoulax
MYSQL : FONCTION POUR GÉRER DES COMPTEURS ÉQUIVALENT AUX SÉQ... par maitredede

 Sources en rapport avec celle ci

Source avec Zip CONVERSION DE NOMBRE EN LETTRES (SQL) par wormlore
SQL SERVER : CONVERSION IP EN CHAÎNE DE TEXTE VERS INTEGER E... par skweeky
REQUETE PERMETTANT DE GÉNÉRER UN NOMBRE ALÉATOIRE SUR 9 DIGI... par redog26
SQL SERVER - FONCTIONS DE CONVERSION D'UNE DATE (CONVERT, DA... par FENETRES
NB LIGNES PAR TABLE par Benouille

Commentaires et avis

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

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)

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 !

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)

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 !

Commentaire de FENETRES le 09/05/2005 16:08:41

OK, pour la conversion en real (mauvaise lecture)

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

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

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 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 insertion de nombre de 1 à N [ par ftug ] Bonjour,j'aimerai inserer dans une table des nombre de 1 à N avec le moins de requetes possible ( le serveur SQL est déjà bien charg&#2 Demander a generer un nombre precis de lignes dans reporting services [ par misterhtml ] bonjour, je m'initie dans le cadre de mon stage a Reporting services et je voudrais a partir d'une date de debut et une date de fin, recuperer le retourner valeur des champs et le nombre d'enregistrments correspondant dans un table liée [ par the_mouette ] Bonjour tout le monde!bon, le titre n'étant pas très clair, je vais essayer d'expliquer mieux :de manière simple, j'ai une table messag pbm avec la requete SELECT [ par goueg83460 ] bonjour,je fait un programme qui lit dans une table d'une base de donnée. Je veut vérifier les disponibilités. Pour cela je lance une r Date format... [ par elpens ] Bonjour,j'ai quelques procedures stockees qui utilisent des dates. Mon problème (si on peux appeler cela un problème), est que je ne sais pa Nombre de réponse retourné en ADO [ par Dyr3e ] bonjour, j'aimerai savoir comment je pourrais obtenir le nombre de réponse retourner en ADO ( avec asp ) sur une requete.merci d'avance. Nombre de jours entre 2 dates [ par jakata ] Bonjour tout le monde,J'aimerais calculer le nombre de jours qu'il y a entre deux dates entrées en paramètre dans une fonction.Si quelqu'un Between un chouilla complexe lol [ par chamallow ] Bonjour,Je cherche depuis un petit moment comment faire une certaine requpete mais je bloque En fait, j'ai une table qui contient plusieurs champs don


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,170 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales