Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2008, 18h01   #1
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut Formatage des nombres

Bonjour,

j'ai le problème suivant si quelqu'un peut m'aider.
En fait je récupère un champs de
type number(12,2) d'une base de donnée oracle. Je dois formater ce
champs en supprimant la virgule et en réservant les deux derniers
caractères au chiffre se trouvant après la virgule et les dix premiers
au chiffre précédant la virgule.
Par exemple (2 --> 000000000200,
2,5 --> 000000000250
et 2,55 --> 000000000255)

y a-t-il une possibilité de faire ce formatage dans ma requête sql (dans le select) ou bien je dois passer par un langage de programmation pour le faire

Merci pour votre aide
Cdlt
ammah
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 18h05   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 975
Points : 3 975
http://sheikyerbouti.developpez.com/...g/?page=Chap51
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 10h10   #3
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Merci de votre réponse,

Je n'ai pas pu comprendre comment la fonction to_charpeut résoudre mon problème.
mon souci est que je dois compléter chaque number avec des '0' avant et après la virgule. par conséquent il faut que je sache qu'il y a une virgule et ensuite ajouter le bon nombre de zeros selon le nombre de chiffres suivant et précédant cette virgule.


Merci
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 12h34   #4
Membre régulier
 
Inscription : septembre 2008
Messages : 77
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 77
Points : 72
Points : 72
Tu peux toujours essayer un query de ce genre:
Code :
1
2
3
 
SELECT lpad(2.05*100,12,'0')
FROM dual
En supposant que 2.05 est le nombre que tu veux transformer
dragon74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 13h18   #5
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Le plus simple est :

Code :
to_char(value, '09999999999V99')
Example :

Code :
1
2
3
4
5
6
7
8
 
SQL> SELECT to_char(2.55, '09999999999V99') FROM dual;
 
TO_CHAR(2.55,
--------------
 0000000000255
 
SQL>
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 15h08   #6
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Merci à vous tous.
Pour le moment j'ai testé la solution proposée par M. dragon74 et elle marche bien.

Je vais essayé celle avec le to_char.

Bien cordialement
ammah
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 11h40   #7
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Bonjour,

vos réponses m'ont beaucoup aidées sauf que je viens de constater un problème. en fait, les nombres peuvent être négatifs et dans ce cas il faut réserver le premier caractère pour le signe '-'
Par exemple 2,5 --> 000000000025
et -2,5 -->-00000000025


auriez vous une idée comment je peux faire ça

Je vous remércie d'avance
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 12h49   #8
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut formatage des nombres

Bonjour,

Ma question est la suivante.
Je récupère un champs de type number(12,2) d'une base de donnée oracle. Je dois formater ce champs en supprimant la virgule et en réservant les deux derniers caractères au chiffre se trouvant après la virgule et les dix premiers
au chiffre précédant la virgule.
Par exemple (2 --> 000000000200,
2,5 --> 000000000250
et 2,55 --> 000000000255)

On m'a proposé d'utiliser lpad ou to_char pour résoudre mon problème. les deux solutions marchent.
Mon souci maintenant est que le number peut être négatif ou positif et pour prendre ça en compte je dois afficher devant chaque number le signe "+" ou "-" suivant le cas.
pouvez vous m'aider afin de réaliser cette tâche


Bien cordialement
ammah
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 13h05   #9
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Code :
SELECT to_char(2.5 * 100,'S0000000000') FROM dual
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 13h27   #10
Membre Expert
 
Inscription : août 2008
Messages : 1 276
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 276
Points : 1 936
Points : 1 936
Bonjour,
Si j'ai bien compris ce que tu voulais :
Code :
1
2
3
4
5
6
7
8
SQL> WITH t AS (SELECT 2.55 AS c FROM dual
union SELECT -2.56 AS c FROM dual)
SELECT decode(sign(c),-1,to_char(c, '0999999999V99'),to_char(c, '09999999999V99')) FROM t;  2    3
 
DECODE(SIGN(C)
--------------
-000000000256
 0000000000255
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 15h27   #11
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Merci pour votre réponse. Pouvez vous m'éclaircir un peu plus

En fait ce que j'ai envie de faire est le suivant.

select(id, montant, ....)
lorsque le montant est positif j'affiche devant le signe + et je le complète par des 0 jusqu'à 12 caractère. lorsqu'il est négatif je mets le signe -
En plus de ça, je dois supprimer les virgules

par exemple
id montant
1 2,5
2 -2,3
3 0

la selection donne

1 -00000000025
2 +00000000023
3 +00000000000


Merci d'avance
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 15h54   #12
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
C'est exactement l'exemple que je viens de vous donner. L'avez-vous seulement essayé ?
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 16h04   #13
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Je vous remercie beaucoup.
En fait au début je ne l'ai pas bien compris. Je viens d'arriver à le faire marcher et je vous en remercie.
Par contre ce qui me manque maintenant c'est d'afficher le signe + devant les nombres positifs.
Le signe - s'affiche bien

Merci d'avance
ammah
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 16h09   #14
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Franchement, je ne vois pas d'où provient votre problème:

Code :
1
2
3
4
5
6
7
8
SQL> SELECT to_char(2.5 * 100,'S000000000000') FROM dual
  2  /
 
TO_CHAR(2.5*1
-------------
+000000000250
 
SQL>
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2008, 17h31   #15
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Je vous remercie beaucoup. La solution que vous m'avez proposé marche

Merci encore



Cordialement
ammah
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2008, 10h33   #16
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Bonjour,

je reviens vers vous M. SheikYerbouti de nouveau. en fait, je viens de constater que mon flux marche pas comme il faut.
2,5 --> +000000000250 ok
mais par exemple
15 --> +000000000015 KO
en fait, le résultat devait être :
+000000001500

pour dire que le deux dernier chiffre sont ce qui est après la virgule.

Merci d'avance
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2008, 10h38   #17
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
C'est bon. Il suffit en fait de multiplier par 100 avant de faire le to_char

merci
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2008, 10h40   #18
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Code :
to_char(value, 'S09999999999V99')
c'est tout de même plus simple...

Code :
1
2
3
4
5
6
7
SQL> SELECT to_char(-15, 'S09999999999V99') FROM dual;
 
TO_CHAR(-15,'S
--------------
-0000000001500
 
SQL>
Code :
1
2
3
4
5
6
7
SQL> SELECT to_char(2.55, 'S09999999999V99') FROM dual;
 
TO_CHAR(2.55,'
--------------
+0000000000255
 
SQL>
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2008, 12h57   #19
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Je te remercie M. vicenzo
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2009, 11h53   #20
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut Formatage des nombres

Bonjour,

c'est moi de nouveau.

avec la fonction to_char que vous m'avez conseillé, j'ai pu faire le formatage pour compléter le montant avec des 0 jusqu'à que j'arrive à 12 caractère. la fonction est : to_char(MNT_*100, '0999999999V99').
Maintenant je souhaite que le montant fasse 24 caractères. J'ai cru qu'il suffit d'ajouter des 9 avant le 'V' mais ça ne marche pas.
pourriez vous m'indiquer comment dois-je faire?

Merci d'avance
ammah
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h15.


 
 
 
 
Partenaires

Hébergement Web