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

cs_Jordan59 174 Messages postés vendredi 26 mai 2006Date d'inscription 9 avril 2014 Dernière intervention - 21 févr. 2012 à 18:16 - Dernière réponse : cs_Jordan59 174 Messages postés vendredi 26 mai 2006Date d'inscription 9 avril 2014 Dernière intervention
- 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

cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 21 févr. 2012 à 19:13
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jopop
cs_Jordan59 174 Messages postés vendredi 26 mai 2006Date d'inscription 9 avril 2014 Dernière intervention - 21 févr. 2012 à 18:19
0
Utile
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
cs_Jordan59 174 Messages postés vendredi 26 mai 2006Date d'inscription 9 avril 2014 Dernière intervention - 22 févr. 2012 à 09:13
0
Utile
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.