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

Langage SQL Discussion :

Decimal et 0 non significatif


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut Decimal et 0 non significatif
    Bonjour,

    je travail avec une DB formatée un peu étrangement, mais je n'ai pas le choix.
    j'explique :

    dans ma base un nombre decimal est exprimé de la façon suivante

    monchiffre--------madecimal
    12345---------------2
    1234----------------0

    il faut comprendre 123.45 pour la première ligne et 1234 pour la 2ème

    afin de formater à l'origine le chiffre je fais le select suivant

    select monchiffre / 10**madecimal from matable

    et ca fonctionne bien sauf pour les records avec 0 decimal ou il m'affiche 1234.0 au lieu de 1234

    ma question est comment avoir le bon formatage directement ?
    merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Utilisez un "CASE"

  3. #3
    Membre averti
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    avec mon exemple oui cela fonctionne, mais dans ma base j'ai aussi ça

    monchiffre--------madecimal
    10000---------------2

    et je récupère 100.0 au lieu de 100

    j'ai donc essayé d'utiliser le case, mais comme la valeur de ma colonne calculée est du décimale il sql m'ajoute tjs un .0 à la fin de mes chiffres entiers.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ben c'est normal puisque c'est du DECIMAL !

    Dans les magasins, tu vois bien des prix affichés 2,00 € non ?

    Bon ok, c'est plus souvent 1,99 € !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    oui je sais mais j'ai essayé de cast en varchar pour avoir du texte avec ou sans point, mais j'obtiens des choses comme 1.44545E1

    se qui ne m'arrange pas non plus


    Citation Envoyé par CinePhil Voir le message
    Ben c'est normal puisque c'est du DECIMAL !

    Dans les magasins, tu vois bien des prix affichés 2,00 € non ?

    Bon ok, c'est plus souvent 1,99 € !

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je ferais plutôt cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
        CASE
            WHEN madecimale = 0 THEN monchiffre
            ELSE monchiffre / (10 * madecimale)
        END AS nouveau_nombre
    FROM matable
    Mais si ta colonne est de type DECIMAL, je pense que tu auras toujours 100.0 !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre averti
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select 
    case ((monchiffre/10**madecimal)-TRUNCATE((monchiffre/10**madecimal),0))
    when 0 then cast((monchiffre/10**madecimal) as decimal(16,0)))
    else (monchiffre/10**madecimal)
    end 
    from matable
    cette requête tourne mais elle m'affiche par exemple 100.0 au lieu de 100

    une idée ?

  8. #8
    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
    Si ça vous embête c'est que ça doit être de l'affichage (puisqu'en terme de calcul 123 ou 123.0 c'est identique), donc n'hésitez pas à convertir vos nombres en chaînes de caractères sur lesquelles il n'y a plus qu'à faire de la mise en page.

    Par exemple sous SQL-Server 2005 :
    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
    ;with matable (monchiffre, madecimal) as
    (
    select 12345, 2 union all
    select 1234 , 0 union all
    select 10000, 2
    )
    select monchiffre, madecimal,
           case
             when monchiffre / power(10, madecimal) = monchiffre / power(10.0, madecimal)
             then cast(monchiffre / power(10  , madecimal) as varchar(max))
             else substring(cast(monchiffre / power(10.0, madecimal) as varchar(max)), 1, len(monchiffre)+1)
           end as res
      from matable
     
    monchiffre  madecimal   res
    ----------- ----------- -------
    12345       2           123.45
    1234        0           1234
    10000       2           100

Discussions similaires

  1. Enlever les zéros non significatifs
    Par Keke des Iles dans le forum Delphi
    Réponses: 9
    Dernier message: 17/03/2017, 01h02
  2. Eliminer des zéros non significatifs
    Par maubeuge59 dans le forum Cobol
    Réponses: 16
    Dernier message: 16/01/2008, 00h25
  3. Crystal reports, Enlver les 0 non significatifs
    Par bossun dans le forum VB.NET
    Réponses: 1
    Dernier message: 22/11/2007, 13h13
  4. Réponses: 3
    Dernier message: 11/05/2007, 15h13
  5. Réponses: 3
    Dernier message: 12/09/2006, 13h53

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