|
Publicité | ||||||||||||||||||||||
|
|
#4 (permalink) |
|
Expert Confirmé Sénior
![]() ![]() ![]() Date d'inscription: décembre 2005
Localisation: Suisse
Messages: 2 590
|
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 |
|
|
|
|
|
#6 (permalink) |
![]() Date d'inscription: janvier 2004
Âge: 32
Messages: 15 403
|
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; / Dernière modification par orafrance ; 12/02/2008 à 14h27. |
|
|
|
|
|
#11 (permalink) | |
|
Invité régulier
![]() Date d'inscription: juillet 2008
Messages: 10
|
bonjour
d’abord merci pour ces efforts juste une petite contribution 1) à la place de Code :
IF SUBSTR(lv$nombre_fr,1,8)='un mille' THEN lv$nombre_fr := SUBSTR(lv$nombre_fr,4); END IF; Citation:
mais si on regarde bien il ya deux espace entre ‘un ‘ et ‘mille’ 'cent un mille' 2) pour les zéros ca dépendra de l’utilisation de cette fonction si c’est pour les monnaies c’est inutile car 1,03 => un euro et trois centimes on dis pas un euro et zéro trois centimes une mise en garde pour l’utilisation de la fonction to_word_en pour la conversion des monnaies le 2eme paramètre devra être fixé a 2. Pour cela j’ai remplacé Code :
lv$decimales VARCHAR2(255) := SUBSTR (pn$nombre - lv$entier, 2); Code :
lv$decimales VARCHAR2 (255) := SUBSTR (to_char(pn$nombre - lv$entier,'9D00'), -pn$precision); Dernière modification par buns ; 11/11/2009 à 05h25. Motif: Merci d'utiliser la balise [code] (bouton #) de l'editeur. |
|
|
|
|
|
|
![]() |
||
SQL Conversion chiffre en lettre
|
||
| Outils de la discussion | |
|
|