begin process at 2010 03 20 20:31:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fonctions

 > CONVERSION DE NOMBRE EN LETTRES (SQL)

CONVERSION DE NOMBRE EN LETTRES (SQL)


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fonctions Classé sous :conversion, convertir, nombre, lettre Niveau :Débutant Date de création :24/10/2008 Date de mise à jour :27/10/2008 03:14:06 Vu / téléchargé :16 253 / 405

Auteur : wormlore

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 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 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 = 1000
  • SET @dix = 0
  • SET @reste = @nombre
  • 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 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
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 = 1000
	SET @dix = 0
	SET @reste = @nombre

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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip CALCUL UNE DIFFÉRENCE DE DATE EN FONCTION DE JOURS FÉRIÉS/TR... par Sieurcoug
NO HTML BALISE [MYSQL] par abdoulax
MYSQL : FONCTION POUR GÉRER DES COMPTEURS ÉQUIVALENT AUX SÉQ... par maitredede
RÉINDEXER TOUTES LES TABLES D'UNE BASE DE DONNÉES par pneau
Source avec une capture SQL SERVER - TRANSMISSION D'UN PARAMETRE A VALEURS MULTIPLES par FENETRES

 Sources en rapport avec celle ci

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
SQL SERVER - CONVERSION D'UN NOMBRE RÉEL (TYPE DÉCIMALE) EN ... par FENETRES
NB LIGNES PAR TABLE par Benouille

Commentaires et avis

Commentaire de Searwn le 29/10/2008 23:56:18

Merci petite correction

WHEN 9 THEN 'quatre-vingt '  >>

WHEN 9 THEN 'quatre-dix'

Commentaire de Searwn le 29/10/2008 23:57:12

WHEN 9 THEN 'quatre-vingt dix'
SORRY

Commentaire de wormlore le 28/11/2008 07:43:14

Normalement non, c'est comme pour 1 et 7: on prépare à écrire "soixante" ou "quatre-vingt", puis on gère le "dix".
Ca vient du fait qu'on n'écrit pas "dix cinq" mais "quinze"...
Les spécificités de la langue française... :\

Commentaire de GURDOUS le 18/12/2008 14:14:02

ça marche pour les chiffre rond, mais pour les chiffre décimal elle n'affiche le décimal.
Meric

Commentaire de wormlore le 22/12/2008 14:01:42

Oui, effectivement ce code ne convertit que les entiers...
Lorsque j'ai écrit "999,999", je voulais dire "neuf cent quatre-vingt dix-neuf mille neuf cent quatre-vingt dix-neuf", pas "neuf cent quatre-vingt dix-neuf virgule neuf cent quatre-vingt dix-neuf" (une petite manie qui consiste à écrire en notation anglaise).

Comme je devais convertir des dates (et un peu en urgence), j'ai paré au plus pressé: les entiers jusqu'à l'ordre du millier.

Commentaire de gperuch le 30/04/2009 17:08:35 8/10

Super,
J'ai fait le même programme à une époque sous qbasic et j'avais compris la difficulté et l'esprit tordu de nos académiciens de la langue française.
Je te donne huit car tu ne dépasse pas le million. quant à la virgule , j'estime que le dba peut faire preuve d'imagination :
select NombreEnLettres(95) + ' Euros et ' + NombreEnLettres (40) + ' centimes'
Merci pour cette prtit fonction.

Commentaire de kolimbi le 21/12/2009 11:18:51

Bonjour à tous, j'ai essayé d'adapter avec PL/SQL mais je vois toujours des erreurs quelqu'un pourra m'aider. Merci d'avance

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Compter avec SQL [ par roud59 ] Bonjour (Bonsoir) &#224; vous tous. J'ai pos&#233; une question (par erreur) sur DelphiFR, mais&nbsp;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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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 : 0,671 sec (4)

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