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 :

CAST + Division, manque zéro


Sujet :

SQL Oracle

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut CAST + Division, manque zéro
    Bonjour, je tente de diviser en VARCHAR sur un format NUMBER pour le remettre en VARCHAR, mais sur un résultat <1, je n'ai pas le Zéro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT TO_CHAR(TO_NUMBER('3'/10)) as nombre FROM DUAL; -- réponse ,3  alors que je voudrais 0,3
     
    SELECT TO_CHAR(TO_NUMBER('31'/10)) as nombre FROM DUAL; -- réponse 3,1 ok
    Naturellement je en peux pas concaténer un zéro, car dans ce cas j'obtiendrais 03,1 sur une réponse au départ correcte !

    Auriez-vous une piste ?

    D'avance merci.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT TO_CHAR(TO_NUMBER('3'/10)) as nombre FROM DUAL; -- réponse ,3  alors que je voudrais 0,3
     
    SELECT TO_CHAR(TO_NUMBER('31'/10)) as nombre FROM DUAL; -- réponse 3,1 ok
    ...
    Non! Déjà To_Number('3'/10) vaut en réalité To_Number(To_Char(To_Number('3') / 10)).
    Ensuite utilisez le format de conversion souhaité pour convertir l'expression "To_Number('3') / 10" en format caractère via To_Char(<arg_numérique>,<format>)

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    J'ai un peu de mal, à comprendre.

    un truc du genre donne la bonne réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_CHAR((TO_NUMBER('2')),9999990.9) as nombre FROM DUAL;
    -- 0.2

    Mais ce n'est qu'une transformation de mon char et en aucun cas un résultat

    Car si je fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TO_CHAR((TO_NUMBER('2')/10),9999990.9) as nombre FROM DUAL; -- 0.00
    Je n'ai donc aucune garantie que le premier soit correcte ?

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
     
    SQL> SELECT TO_CHAR((TO_NUMBER('2')/10),'0D9') as nombre FROM DUAL;
    NOMBRE
    ------
     0,2

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -- réponse ,3  alors que je voudrais 0,3
    C'est de l'affichage, donc obligatoirement un format de TO_CHAR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Oracle Database 11g Release 11.2.0.3.0 - 64bit
     
    SQL> select 0.2 from dual;
     
           0.2
    ----------
            .2
    C'est un truc que je n'ai jamais compris de la part d'Oracle (ou sql je sais pas), c'est que le 0 ne soit pas affiché par défaut sur des nombres >-1 et < 1
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    J'ai un peu de mal, à comprendre.

    ...
    '2' c'est du caractère
    '2'/10 c'est déjà du numérique équivalent du to_number('2') / 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
     
    SQL> SELECT dump('2'/10), dump(to_number('2')/10), dump('2') from dual;
    DUMP('2'/10)        DUMP(TO_NUMBER('2')/10) DUMP('2')
    ------------------- ----------------------- ----------------
    Typ=2 Len=2: 192,21 Typ=2 Len=2: 192,21     Typ=96 Len=1: 50
    Mais to_number ne s'applique pas à du numérique
    TO_NUMBER converts expr to a value of NUMBER data type. The expr can be a BINARY_DOUBLE value or a value of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 data type containing a number in the format specified by the optional format model fmt
    donc to_number('2'/10) implique une coercition vers to_char d'abord.

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Merci de votre aide, Nickel

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

Discussions similaires

  1. Division par zéro
    Par soltani1 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/05/2006, 09h42
  2. [Tableaux] Pb de division par zéro...
    Par blueice dans le forum Langage
    Réponses: 8
    Dernier message: 16/12/2005, 15h52
  3. [CR][VS.NET]Division par zéro
    Par San Soussy dans le forum SDK
    Réponses: 2
    Dernier message: 31/08/2005, 14h40
  4. [CR8.5] Problème de division par zéro sur formule
    Par franck.cvitrans dans le forum Formules
    Réponses: 3
    Dernier message: 10/06/2004, 13h41
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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