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

SQL Oracle Discussion :

Convertir SHORT_STRING en NUMBER


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Par défaut Convertir SHORT_STRING en NUMBER
    Bonjour à tous,

    Je voudrais convertir un SHORT_STRING ayant la tête suivante : 6.3 ou 9 en NUMBER car je voudrais faire une somme dessus.
    Pour l'instant si je la réalise, j'ai l'erreur invalid number.
    Quelqu'un pourrait-il m'aider svp ?

    Merci,

    Elodie

  2. #2
    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 Lolie11 Voir le message
    Je voudrais convertir un SHORT_STRING
    Bonjour

    SHORT_STRING n'est pas quelque chose qui existe sous Oracle. D'où cela provient-il ??

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Par défaut
    En fait je travaille sur des produits IBM, le produit est ClearQuest. D'après le schéma le nombre est un short string car c'est du SQL

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par Lolie11 Voir le message
    D'après le schéma le nombre est un short string car c'est du SQL
    Très joli, mais ça ne veut rien dire

  5. #5
    Membre expérimenté
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Par défaut
    Bonjour,

    Oracle sait convertir implicitement un type de données. Le séparateur décimal est sans doute une virgule c'est pourquoi la somme ne fonctionne pas. Pour modifier cela dans ta session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ". ";
    (Attention, il y a un espace après le point)

    La somme ne devrait plus poser de problème, excepté si dans ce champ plusieurs séparateurs décimaux sont présents, ce qui serait encore plus sale que de sommer du texte

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Par défaut
    Bonjour,

    Oui désolé pour ma phrase qui ne voulait rien dire, j'étais un peu naze.

    Donc je travaille sur l'outil IBM ClearQuest qui peut être couplé avec pas mal de base de données. Les requêtes sous cet outil sont en SQL. Et l'outil a été couplé avec une BD Oracle. En effet je viens de vérifier dans l'outil ClearQuest il est écrit que mon champ estimate_wk_ld est un short_string mais en vérité c'est un VARCHAR.

    Les séparateurs sont bien des "."

    Merci

  7. #7
    Membre expérimenté
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Par défaut
    Bonjour,

    Les séparateurs sont bien des "."
    Et as-tu assayé la solution proposée ?

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Par défaut
    Non je n'ai pas essayé. Mais je n'ai accès qu'à l'outil de programmation des requêtes et seulement le select est autorisé !!

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Pour reprendre la solution de Mathias, si vous ne voulez ou ne pouvez pas toucher à la session vous pouvez l'intégrer directement dans votre formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_number(MyShortString, <format>, 'NLS_NUMERIC_CHARACTERS = ''. ''')
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select num + to_number(sst, '9D9', 'NLS_NUMERIC_CHARACTERS=''. ''') tst
    from
    (select 2.5 num, '1.3' sst from dual union all
    select 3 num, '.2' sst from dual)

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Par défaut
    Merci,

    Je suis désolée Waldar mais je ne comprends pas bien ton exemple. Je n'ai pas de grandes connaissances.

    Ce qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT sum(T1.estimate_wk_ld) from Defect T1
    Avec ce que tu me dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT sum(to_number(T1.estimate_wk_ld,'9D9','NLS_NUMERIC_CHARACTERS = ''. ''')) from Defect T1
    Enfait il y a dans cette colone estimate_wk_ld des nombres 125 comme des nombre 0.1 que puis-je mettre au niveau du format ?

    Merci,

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez agrandir le format de conversion (là il vous faudrait regarder ce qu'il y a dans la base en terme de qualité de donnée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT sum(to_number(T1.estimate_wk_ld, '999999999D9999999', 'NLS_NUMERIC_CHARACTERS = ''. '''))
    FROM Defect T1
    Le 9 est est caractère non obligatoire, 125 effectivement ne rentre pas dans le format 9D9 (qui veut dire entre 0 et 1 chiffre avant la virgule - enfin le point - et entre 0 et 1 chiffre après).

    Sinon vous pouvez essayer avec un REPLACE, mais c'est moins propre et moins portable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT sum(to_number(replace(T1.estimate_wk_ld, '.', ',')))
    FROM Defect T1

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Par défaut
    Ca ne fonctionne toujours pas... J'ai beau tester sous SLQ Editor présent sous ClearQuest comme SQL Developper ça ne fonctionne pas

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Pouvez-vous nous donner le résultat de cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT substr(T1.estimate_wk_ld, 1, 1), count(*)
    FROM Defect T1
    group by substr(T1.estimate_wk_ld, 1, 1)

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Par défaut
    Bonjour,

    Ben du coup je viens de m'apercevoir que ce champs est remplie certaines fois complètement à l'arrache comme avec des "à définir". Donc merci beaucoup pour vos informations, mais du coup forcément ça ne pouvait pas marcher.
    Je vais prendre un autre champ pour faire mon tri.

    Merci et encore milles excuses...

  15. #15
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous n'avez aucunement besoin de formuler des excuses, on est sur ce forum pour apprendre et comprendre !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir number en date
    Par reupie80 dans le forum SQL
    Réponses: 3
    Dernier message: 19/05/2008, 19h57
  2. Convertir un logical unit number en file descriptor
    Par lilly_79 dans le forum Fortran
    Réponses: 5
    Dernier message: 08/10/2007, 14h18
  3. Convertir raw(32) en number
    Par marion782 dans le forum Oracle
    Réponses: 1
    Dernier message: 08/01/2007, 14h08
  4. convertir une variable de type String en Number
    Par lilbrother974 dans le forum Flash
    Réponses: 13
    Dernier message: 06/09/2006, 08h28
  5. Convertir Type Text En Type Number
    Par jam92400 dans le forum Access
    Réponses: 3
    Dernier message: 30/05/2006, 10h04

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