Problème conversion chaîne en number avec TO_NUMBER [Résolu]

Messages postés
174
Date d'inscription
vendredi 26 mai 2006
Dernière intervention
9 avril 2014
- - Dernière réponse : cs_Jordan59
Messages postés
174
Date d'inscription
vendredi 26 mai 2006
Dernière intervention
9 avril 2014
- 22 févr. 2012 à 09:13
Bonsoir à tous

Je rencontre un petit souci de conversion de chaîne en numérique.

J’ai des nombres décimaux (‘1234.56’ et '1234,56') stocké dans un champ de type VARCHAR2. je souhaiterai récupérer ces nombre en faisant un TO_NUMBER(‘1234.56’) ou TO_NUMBER(‘1234,56’) mais le problème est qu'un des deux explose car le séparateur numérique de la base est ‘,’ et non ‘.’ !

Je voudrai donc pouvoir faire un TO_NUMBER(‘1234.56’) mais aussi un TO_NUMBER(‘1234,56’) sans que ça n’explose et ce quel que soit le séparateur paramétré pour la base.

Quelqu'un pourrait-il m'aider ?

Merci par avance !
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
3
Merci
Salut,

suffit sûrement de faire un REPLACE avant de caster, genre :

TO_NUMBER(REPLACE(mon_champ, '.', ','))


si la valeur textuelle a déjà une virgule, aucun remplacement ne sera fait
si la valeur textuelle a un point, il sera remplacé par une virgule
dans les deux cas le cast se passera donc bien
(non testé, j'ai pas de serveur Oracle sous la main)

Merci cs_jopop 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_jopop
Messages postés
174
Date d'inscription
vendredi 26 mai 2006
Dernière intervention
9 avril 2014
0
Merci
Bonsoir à tous

Je rencontre un petit souci de conversion de chaîne en numérique.

J'ai des nombres décimaux ('1234.56' et '1234,56') stockés dans un champ de type VARCHAR2. je souhaiterai récupérer ces nombre en faisant un TO_NUMBER('1234.56') ou TO_NUMBER('1234,56') mais le problème est qu'un des deux explose car le séparateur numérique de la base est ',' et non '.' !

Je voudrai donc pouvoir faire un TO_NUMBER('1234.56') mais aussi un TO_NUMBER('1234,56') sans que ça n'explose et ce quel que soit le séparateur paramétré pour la base.

Quelqu'un pourrait-il m'aider ?

Merci par avance !
Commenter la réponse de cs_Jordan59
Messages postés
174
Date d'inscription
vendredi 26 mai 2006
Dernière intervention
9 avril 2014
0
Merci
Nickel merci !

J'ai fait ceci grâce à ton aide :
TO_NUMBER(REPLACE('1234.56', '.', ','), '99999999D999999', 'nls_numeric_characters='', ''')


Et ça fonctionne quel que soit le séparateur numérique paramétré pour la base, j'espère que ça servira à d'autres !
Commenter la réponse de cs_Jordan59

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.