Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter

Débuter Forum d'entraide pour débuter avec Oracle

Réponse
 
Outils de la discussion
Vieux 12/02/2008, 10h41   #1 (permalink)
Invité de passage
 
Date d'inscription: février 2008
Messages: 4
Par défaut SQL Conversion chiffre en lettre

Bonjour,

Existe t il une fonction dans sql permettant de convertir un nombre en lettres?
Exemple: "1200" devient "mille deux cent"
Merci d'avance
laurep est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 10h45   #2 (permalink)
Expert Confirmé Sénior
 
Avatar de LeoAnderson
 
Date d'inscription: septembre 2004
Messages: 2 927
Par défaut


http://www.developpez.net/forums/sho...iffres+lettres
http://www.developpez.net/forums/sho...iffres+lettres
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 10h45   #3 (permalink)
Responsable SGBD
 
Avatar de orafrance
 
Date d'inscription: janvier 2004
Âge: 32
Messages: 14 884
Par défaut

http://oracle.developpez.com/sources...mbre_a_lettres
orafrance est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 10h46   #4 (permalink)
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Date d'inscription: décembre 2005
Localisation: Suisse
Messages: 2 520
Par défaut

il n'y a pas ce genre de fonction en français, seulement en anglais avec quelque chose du style
Code :
SQL> SELECT to_char(to_timestamp('000001200','FF'),'ffsp') FROM dual
 
TO_CHAR(TO_TIMESTAMP('000001200','FF'),'FFSP')                                
-------------------------------------------------
one thousand two hundred
dans le tutorial Oracle tu trouveras une fonction qui devrait bien te servir...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 10h49   #5 (permalink)
Responsable SGBD
 
Avatar de orafrance
 
Date d'inscription: janvier 2004
Âge: 32
Messages: 14 884
Par défaut

par contre, va falloir que je m'occupe du bug de la virgule et des problèmes d'orthographe
orafrance est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 14h02   #6 (permalink)
Responsable SGBD
 
Avatar de orafrance
 
Date d'inscription: janvier 2004
Âge: 32
Messages: 14 884
Par défaut

j'ai corrigé le bug des zeros, la page source sera mise à jour très vite :
Code :
CREATE OR REPLACE FUNCTION to_word_en(pn$nombre IN NUMBER) 
   RETURN VARCHAR2 
AS 
   -- 
   TYPE table_varchar IS TABLE OF VARCHAR2 (255); 
 
   -- 
   lv$multiples table_varchar  := table_varchar ('', 
                                  ' thousand ', 
                                  ' million ', 
                                  ' billion ', 
                                  ' trillion ', 
                                  ' quadrillion ', 
                                  ' quintillion ', 
                                  ' sextillion ', 
                                  ' septillion ', 
                                  ' octillion ', 
                                  ' nonillion ', 
                                  ' decillion ', 
                                  ' undecillion ', 
                                  ' duodecillion ', 
                                  ' tridecillion ', 
                                  ' quaddecillion ', 
                                  ' quindecillion ', 
                                  ' sexdecillion ', 
                                  ' septdecillion ', 
                                  ' octdecillion ', 
                                  ' nondecillion ', 
                                  ' dedecillion ' 
                                  ); 
 
   lv$entier           VARCHAR2 (255) := TRUNC (TO_NUMBER (REPLACE (pn$nombre, ' ', ''))); 
   lv$decimales        VARCHAR2 (255) := SUBSTR (pn$nombre - lv$entier, 2); 
   lv$mots_complets    VARCHAR2 (4000); 
   lv$entier_lettres   VARCHAR2 (4000); 
   lv$nb_zero		   INTEGER;
BEGIN 
 
   -- 
   -- Traitement de la partie décimale 
   -- 
   IF NVL (lv$decimales, 0) != 0 
   THEN 
     FOR i IN 1 .. lv$multiples.COUNT 
     LOOP 
       EXIT WHEN lv$decimales IS NULL; 
 
       -- 
      IF (SUBSTR (lv$decimales, LENGTH (lv$decimales) - 2, 3) <> 0) 
        THEN 
         lv$mots_complets := 
                TO_CHAR (TO_DATE (SUBSTR (lv$decimales, 
                                            LENGTH (lv$decimales) - 2, 
                                            3 
                                           ), 
                                    'j' 
                                   ), 
                           'jsp' 
                          ) 
               || lv$multiples (i) 
               || lv$mots_complets; 
        END IF; 
 
        lv$decimales := SUBSTR (lv$decimales, 1, LENGTH (lv$decimales) - 3); 
     END LOOP; 
 
     lv$nb_zero := instr(translate(SUBSTR (pn$nombre - lv$entier, 2),'123456789','x'),'x')-1;
	 dbms_output.put_line(lv$decimales);
	 IF lv$nb_zero > 0 THEN
	   FOR i IN 1..lv$nb_zero LOOP
	     lv$mots_complets := 'zero ' || lv$mots_complets;
       END LOOP;
     END IF;
	 -- Annonce la décimale (remplacer par Euro pour les montants en euros par exemple) 
      lv$mots_complets := ' point ' || lv$mots_complets; 
     
   END IF; 
 
   -- 
   -- Traitement de la partie entière 
   -- 
   IF NVL (lv$entier, 0) = 0 
   THEN 
      lv$mots_complets := 'zero' || lv$mots_complets; 
   ELSE 
      FOR i IN 1 .. lv$multiples.COUNT 
      LOOP 
         EXIT WHEN lv$entier IS NULL; 
 
         -- 
         IF (SUBSTR (lv$entier, LENGTH (lv$entier) - 2, 3) <> 0) 
         THEN 
            lv$mots_complets := 
                  TO_CHAR (TO_DATE (SUBSTR (lv$entier, LENGTH (lv$entier) - 2, 
                                            3), 
                                    'j' 
                                   ), 
                           'jsp' 
                          ) 
               || lv$multiples (i) 
               || lv$mots_complets; 
         END IF; 
 
         lv$entier := SUBSTR (lv$entier, 1, LENGTH (lv$entier) - 3); 
      END LOOP; 
   END IF; 
 
   RETURN lv$mots_complets; 
END to_word_en; 
/
Edit : la page source est à jour et le pluriel était déjà OK

Dernière modification par orafrance ; 12/02/2008 à 14h27.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 14h50   #7 (permalink)
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Date d'inscription: décembre 2005
Localisation: Suisse
Messages: 2 520
Par défaut

moi je dirais quatre-vingt mille sans s à vingt
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 16h33   #8 (permalink)
Responsable SGBD
 
Avatar de orafrance
 
Date d'inscription: janvier 2004
Âge: 32
Messages: 14 884
Par défaut

ha oui... mais quatre-vingts-millions

d'ailleurs, le trait d'union est aussi manquant
orafrance est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 16h40   #9 (permalink)
Invité de passage
 
Date d'inscription: février 2008
Messages: 4
Par défaut

Je travaille sous SQL server.
Avez vous cette fonction déjà codée en Transact-SQL? Je ne connais pas les équivalences des fonctions en Oracle
laurep est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/02/2008, 16h48   #10 (permalink)
Responsable SGBD
 
Avatar de orafrance
 
Date d'inscription: janvier 2004
Âge: 32
Messages: 14 884
Par défaut

tu as vu que tu étais dans le forum Oracle ?

Eventuellement tu peut solliciter un membre du forum SQL Server pour qu'il fasse une "traduction" T-SQL
orafrance est déconnecté   Envoyer un message privé Réponse avec citation
NEWS ORACLEF.A.Q ORACLETUTORIELS ORACLETUTORIELS SQLSCRIPTS SQLLIVRES ORACLEQUIZBLOG ORACLE

Réponse

Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h44.


Vos questions techniques : forum d'entraide Oracle - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2009 www.developpez.com - Legal informations.