Accueil > > > CONVERSION DE NOMBRE EN LETTRES (SQL)
CONVERSION DE NOMBRE EN LETTRES (SQL)
Information sur la source
Description
Je me suis inspiré du code c# trouvé ici (http://files.codes-sources.com/fichier.aspx?id=21 491&f=convertisseur.cs) pour écrire cette fonction SQL. Elle convertit les nombres de 0 à 999,999,999 en lettres, et j'ai corrigé un ou deux points mineurs.
Source
CREATE FUNCTION NombreEnLettres
(
@nombre int
)
RETURNS varchar(200)
AS
BEGIN
DECLARE @lettres varchar(200)
DECLARE @diviseur int
DECLARE @centaine int
DECLARE @dizaine int
DECLARE @unite int
DECLARE @reste int
DECLARE @courant int
DECLARE @dix bit
DECLARE @et bit
DECLARE @ajout varchar(200)
SET @lettres = ''
SET @diviseur = 1000000
SET @dix = 0
SET @reste = @nombre
IF @nombre > 999999999
RETURN 'Un milliard ou plus'
WHILE @diviseur >= 1
BEGIN
SELECT @courant = @reste / @diviseur
IF @courant <> 0
BEGIN
SELECT @centaine = @courant / 100
SELECT @dizaine = (@courant - @centaine * 100) / 10
SELECT @unite = @courant - (@centaine * 100) - (@dizaine * 10)
SELECT @ajout = ''
SELECT @ajout = @ajout +
CASE @centaine
WHEN 1 THEN 'cent '
WHEN 2 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'deux cents ' ELSE 'deux cent ' END
WHEN 3 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'trois cents ' ELSE 'trois cent ' END
WHEN 4 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'quatre cents ' ELSE 'quatre cent ' END
WHEN 5 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'cinq cents ' ELSE 'cinq cent ' END
WHEN 6 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'six cents ' ELSE 'six cent ' END
WHEN 7 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'sept cents ' ELSE 'sept cent ' END
WHEN 8 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'huit cents ' ELSE 'huit cent ' END
WHEN 9 THEN
CASE WHEN @dizaine = 0 AND @unite = 0 THEN 'neuf cents ' ELSE 'neuf cent ' END
ELSE ''
END
SELECT @ajout = @ajout +
CASE @dizaine
WHEN 2 THEN 'vingt '
WHEN 3 THEN 'trente '
WHEN 4 THEN 'quarante '
WHEN 5 THEN 'cinquante '
WHEN 6 THEN 'soixante '
WHEN 7 THEN 'soixante '
WHEN 8 THEN 'quatre-vingt '
WHEN 9 THEN 'quatre-vingt '
ELSE ''
END
SELECT @dix = CASE @dizaine
WHEN 1 THEN 1
WHEN 7 THEN 1
WHEN 9 THEN 1
ELSE 0
END
SELECT @et = CASE @dizaine
WHEN 0 THEN 0
WHEN 1 THEN 0
WHEN 2 THEN 1
WHEN 3 THEN 1
WHEN 4 THEN 1
WHEN 5 THEN 1
WHEN 6 THEN 1
WHEN 7 THEN 1
WHEN 8 THEN 0
WHEN 9 THEN 0
ELSE 0
END
SELECT @ajout = @ajout +
CASE @unite
WHEN 0 THEN
CASE @dix WHEN 1 THEN 'dix ' ELSE '' END
WHEN 1 THEN
CASE @et WHEN 1 THEN 'et ' ELSE '' END +
CASE @dix WHEN 1 THEN 'onze ' ELSE 'un ' END
WHEN 2 THEN
CASE @dix WHEN 1 THEN 'douze ' ELSE 'deux ' END
WHEN 3 THEN
CASE @dix WHEN 1 THEN 'treize ' ELSE 'trois ' END
WHEN 4 THEN
CASE @dix WHEN 1 THEN 'quatorze ' ELSE 'quatre ' END
WHEN 5 THEN
CASE @dix WHEN 1 THEN 'quinze ' ELSE 'cinq ' END
WHEN 6 THEN
CASE @dix WHEN 1 THEN 'seize ' ELSE 'six ' END
WHEN 7 THEN
CASE @dix WHEN 1 THEN 'dix-sept ' ELSE 'sept ' END
WHEN 8 THEN
CASE @dix WHEN 1 THEN 'dix-huit ' ELSE 'huit ' END
WHEN 9 THEN
CASE @dix WHEN 1 THEN 'dix-neuf ' ELSE 'neuf ' END
ELSE ''
END
SELECT @lettres = @lettres +
CASE @diviseur
WHEN 1000000 THEN
CASE
WHEN @courant = 1 THEN 'un million '
WHEN @courant > 1 THEN @ajout + 'millions '
END
WHEN 1000 THEN
CASE WHEN @courant > 1 THEN @ajout ELSE '' END + 'mille '
ELSE @ajout
END
SELECT @reste = @reste - @courant * @diviseur
END
SELECT @diviseur = @diviseur / 1000
END
IF @lettres = '' SELECT @lettres = 'zéro'
RETURN RTRIM(@lettres)
END
GO
Conclusion
Comme j'en avais besoin pour convertir des dates, je me suis arrêté avant le million, mais on peut rajouter facilement les millions et milliards. (passer le @diviseur initial à 10^6 ou 10^9, selon les besoin, puis ajouter le cas à la fin dans le CASE @diviseur)
Update: J'ai ajouté les millions... J'espère que ça aidera certains. Et je me suis amusé à retourner une simple indication de dépassement si on atteint le milliard. Notez d'ailleurs que pour les milliards, il faudra (en plus des mêmes modifications effectuées ici) passer le type de @nombre et @reste à bigint (le int étant majoré à 2,147,483,647).
Historique
- 24 juillet 2010 21:54:57 :
- Ajout de la gestion des millions
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Compter avec SQL [ par roud59 ]
Bonjour (Bonsoir) à vous tous. J'ai posé une question (par erreur) sur DelphiFR, mais je pense trouver quelqu'un qui pourra m'aider pus
conversion bigint [ par bootchoz ]
bonjour,est-il possible de convertir un paramètre passé dans une procédure stockée ? J'ai un varchar(50) que je voudrais convertir en bigint. merci po
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
Convertir String en int avec sql 2000 [ par Alligacom ]
Bonjour, Je dois faire une incrémentation d'une table qui est en format string mais qui contient des numéros de 10000. Il y a eu un corruption de la b
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
convertir script en mcd [ par futuramabender ]
bonjour, j'ai un projet a réaliser et j'ai deja un script sql qui genere les tables de donnees.j'ai besoin de savoir si ya un outil qui peut me genere
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
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
Connaitre le nombre d'occurences dans une chaîne de caractères ? [ par fgodefroidt ]
Bonjour,Existe-t-il un mot clé commen "instr" ou "len" pour savoir combien de fois un caractère bien précis est présent dans une chaîne de caractères
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
BESOIN D'UN BIBESOIN D'UN BI par michimichid
Cliquez pour lire la suite par michimichid
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|