IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Problèmes de format de nombre


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Par défaut Problèmes de format de nombre
    Bonjour,

    Je souhaite transformer une chaine de caractère en un nombre avec to_number.

    Voici les exemples de données en entrées :

    Row# TOTAL_AMOUNT_TCUR

    1 100.3600
    2 1000.0000
    3 11500.0000
    4 5000.7500
    5 1000.0000
    6 2000.0000
    7 1500.0000
    8 10.0000
    9 10.3800-
    10 1000.0000
    11 10000.0000
    12 100.0000
    13 150000.0000
    14 1000.0000
    15 20.0000


    J'ai essayé avec la requête suivante :
    select to_number(replace(ODS1.TOTAL_AMOUNT_TCUR,'.',','),'9999999D0000MI') from ODS_ZBU_ITEM_GET ODS1;

    il me marque nombre non valide, je cherche depuis un moment mais je ne trouve pas le bon format....
    Pouvez vous m'aidez?
    Merci d'avance...

    PS : j'ai fait un replace car mon NLS_LANGUAGE est AMERICA.....

  2. #2
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut


    Ton format est bon cependant si tu précise MI (signe) à chaque fin de nombre il faut qu'il soit présent , et je pense que les nombres prositifs n'ont pas de signe, il faut donc il en donner un avec un "+" ou " " espace
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    with exp as (
    select '100.3600' nb from dual union all 
    select '1000.0000' nb from dual union all 
    select '11500.0000' nb from dual union all 
    select '5000.7500' nb from dual union all 
    select '1000.0000' nb from dual union all 
    select '2000.0000' nb from dual union all 
    select '1500.0000' nb from dual union all 
    select '10.0000' nb from dual union all 
    select '10.3800-' nb from dual union all 
    select '1000.0000' nb from dual union all 
    select '10000.0000' nb from dual union all 
    select '100.0000' nb from dual union all 
    select '150000.0000' nb from dual union all 
    select '1000.0000' nb from dual union all 
    select '20.0000' nb from dual
    )
    select to_number(decode(substr(nb,length(nb),1),'-',nb,nb||' '),'99999999D9999MI','NLS_NUMERIC_CHARACTERS =''. ''') exp1
    ,to_number(decode(substr(nb,length(nb),1),'-',nb,nb||'+'),'99999999D9999MI','NLS_NUMERIC_CHARACTERS =''. ''') exp2
    from exp

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    ou plus simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    SQL> with exp as (
      2  select '100.3600' nb from dual union all
      3  select '1000.0000' nb from dual union all
      4  select '11500.0000' nb from dual union all
      5  select '5000.7500' nb from dual union all
      6  select '1000.0000' nb from dual union all
      7  select '2000.0000' nb from dual union all
      8  select '1500.0000' nb from dual union all
      9  select '10.0000' nb from dual union all
     10  select '10.3800-' nb from dual union all
     11  select '1000.0000' nb from dual union all
     12  select '10000.0000' nb from dual union all
     13  select '100.0000' nb from dual union all
     14  select '150000.0000' nb from dual union all
     15  select '1000.0000' nb from dual union all
     16  select '20.0000' nb from dual
     17  )
     18  select nb,to_number(nb,'FM99999999999D999999999MI')
     19  from exp;
    NB          TO_NUMBER(NB,'FM99999999999D999999999MI')
    ----------- -----------------------------------------
    100.3600                                       100.36
    1000.0000                                        1000
    11500.0000                                      11500
    5000.7500                                     5000.75
    1000.0000                                        1000
    2000.0000                                        2000
    1500.0000                                        1500
    10.0000                                            10
    10.3800-                                       -10.38
    1000.0000                                        1000
    10000.0000                                      10000
    100.0000                                          100
    150000.0000                                    150000
    1000.0000                                        1000
    20.0000                                            20

  4. #4
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Citation Envoyé par laurentschneider
    ou plus simplement
    Effectivement c'est bien plus simple sorry mais je note

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Par défaut
    La méthode et plus simplement ne fonctionne pas lol
    donc elle est plus simple mais cela ne fonctionne pas

  6. #6
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Par défaut
    Je vous remercie de votre aide car la méthode 1 fonctionne sauf pour ce jeu de données la...

    Row# SUMME

    1 120
    2 120
    3 120
    4 1315
    5 111
    6 497.5
    7 270
    8 100
    9 120
    10 111
    11 497.5
    12 270



    pouvez vous me dire pourquoi?
    voici la requête :
    select to_number(decode(substr(ODS11.SUMME,length(ODS11.SUMME),1),'-',ODS11.SUMME,ODS11.SUMME||' '),'9999999990D0000MI','NLS_NUMERIC_CHARACTERS =''. ''') from ODS_ORD_E1EDS01 ODS11;

    Merci d'avance

  7. #7
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Par défaut Nouveau problème de format :
    Bonjour,

    j'ai eu besoin de votre aide il y a quelques temps pour un format de données,

    Le format était celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    to_number(decode(substr(ODS1.MWSTS,length(ODS1.MWSTS),1),'-',ODS1.MWSTS,ODS1.MWSTS||' '),'99999990D0000MI','NLS_NUMERIC_CHARACTERS =''. ''')
    Or j'ai reçu des nouvelles données de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    369,00-
    1,50-
    18978998,23
    14578,00-
    145,00
    25,00-

    Outre le problème de de , à la place du point que j'ai réglé il me donne les résultats suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    -369
    -1
    -18978998
    -14578
    145
    -25
    Pouvez vous me dire pourquoi?
    je vous remercie par avance
    Cordialement
    Nicolas

  8. #8
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par ksper45
    j'ai eu besoin de votre aide il y a quelques temps pour un format de données,
    Bonjour

    Dans ce cas-là, il faut soit poursuivre votre sujet initial, soit donner les précisions utiles dans le nouveau sujet.
    Pour quelqu'un qui n'a pas suivi vos péripéties antérieures, on ne comprend rien à votre besoin, ni à votre titre.

    Vous essayez de faire quoi ? Avec quel outil ?
    "il me donne", ce n'est pas compréhensible hors contexte.

  9. #9
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Par défaut
    Bonjour,

    pardonnez moi de ne pas avoir réutilisez l'ancien sujet et de mon manque de précision. Mais comme je l'avais mis en résolu....

    Bref, je cherche a convertir une chaine de caractère en nombre mais les messages d'erreurs initiales étaient : "nombre non valide"

    il a donc falllu chercher un nouveau format de nombre..

    cela fonctionnait jusqu'a ce que j'ai une nouvelle chaine de caractère présenter dans mon premier message


    merci de votre aide

    Cordialement

    Nicolas

  10. #10
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    18978998,23 contient 8 chiffres avant la virgule, et ton format ne comporte que 7 "9" ça viens peut etre de là...

  11. #11
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Par défaut
    Merci Fred pour la correction. j'ai essayé avec des '9' en plus devant le format et ça ne change rien...

  12. #12
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    voila qui est corrigé

Discussions similaires

  1. [XL-2007] Problème de format de nombre à virgule dans une liste de validation
    Par basto dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/05/2014, 15h03
  2. Réponses: 5
    Dernier message: 16/05/2014, 14h38
  3. Problème de format de nombre
    Par thomzon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 10/12/2007, 19h23
  4. Profiling Report: problème format de nombre
    Par cyrille37 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/09/2007, 15h10
  5. problème de format de nombre
    Par nicolasferraris dans le forum ASP
    Réponses: 1
    Dernier message: 27/11/2006, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo