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

Discussion: Utiliser le CAST

  1. #1
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 179
    Points : 601
    Points
    601

    Par défaut Utiliser le CAST

    Bonjour,

    J'utilise le CAST en calculant des champs pour obtenir une décimale à deux chiffres. A votre avis, faut-il utiliser le CAST pour toute l'opération ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SUM (CAST(CL.QUANTITE * CL.PRIX_UNITAIRE AS NUMERIC(9,2)))  AS MONTANT_HT
    Ou utiliser le CAST pour chaque champ ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SUM (CAST(CL.QUANTITE AS NUMERIC(9,2))) * CAST(CL.PRIX_UNITAIRE AS NUMERIC(9,2)))  AS MONTANT_HT
    Sachant que je pourrais avoir quatre à cinq champs dans le calcul.
    En vous remerciant de votre aide.
    Le Savoir c'est le Pouvoir !
    S.Freud

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 795
    Points : 24 337
    Points
    24 337

    Par défaut

    Quel est le type des colonnes utilisées dans le calcul à l'origine ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 485
    Points : 23 033
    Points
    23 033
    Billets dans le blog
    13

    Par défaut

    Bonjour
    Citation Envoyé par freud Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SUM (CAST(CL.QUANTITE AS NUMERIC(9,2))) * CAST(CL.PRIX_UNITAIRE AS NUMERIC(9,2)))  AS MONTANT_HT
    Donnera 4 décimales sans parler du fait que si les colonnes ont plus de décimales on obtiendra des arrondis dangereux

    Il y a une autre possibilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CAST(SUM(CL.QUANTITE*CL.PRIX_UNITAIRE) AS NUMERIC(9,2))  AS MONTANT_HT
    Tout dépend si l'on veut arrondir "à la ligne" dans le premier SQL ou "au groupe" dans la seconde
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Berlin, Tokyo) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  4. #4
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 179
    Points : 601
    Points
    601

    Par défaut

    Citation Envoyé par al1_24
    Quel est le type des colonnes utilisées dans le calcul à l'origine ?

    Tous les champs sont en NUMERIC(15,2) et si je n'utilise pas le CAST le résultat est une décimale de huit ou dix chiffres selon le nombre de champs impliquer dans le calcul.
    Le Savoir c'est le Pouvoir !
    S.Freud

  5. #5
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 179
    Points : 601
    Points
    601

    Par défaut

    Pardon SergioMaster j'ai pa vu votre post je vais essayer votre solution merci
    Le Savoir c'est le Pouvoir !
    S.Freud

  6. #6
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 179
    Points : 601
    Points
    601

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CAST(SUM(CL.QUANTITE*CL.PRIX_UNITAIRE) AS NUMERIC(9,2))  AS MONTANT_HT
    Donc au groupe on CAST au début une fois pour toute l'opération quelque soit le nombre de champ impliquer comme par exemple pour l'opération suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT CAST(SUM((CL.QUANTITE * CL.PRIX_UNITAIRE) * (COALESCE(CL.TAUX_REMISE,0)/100.0))AS NUMERIC(9,2))  AS MONTANT_REMISE
    FROM  COMMANDE_FOUR_LIGNE AS CL
    Et à la ligne ce n'est pas pareil, bien sûr sans le SUM ?
    Le Savoir c'est le Pouvoir !
    S.Freud

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 485
    Points : 23 033
    Points
    23 033
    Billets dans le blog
    13

    Par défaut

    Citation Envoyé par freud Voir le message
    Donc au groupe on CAST au début une fois pour toute l'opération quelque soit le nombre de champ impliqué comme par exemple pour l'opération suivante:
    Oui

    Et à la ligne ce n'est pas pareil, bien sûr sans le SUM ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT  CAST(CL.QUANTITE * CL.PRIX_UNITAIRE*COALESCE(CL.TAUX_REMISE,0)/100.0 AS NUMERIC(9,2))  AS MONTANT_REMISE
    FROM  COMMANDE_FOUR_LIGNE AS CL
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Berlin, Tokyo) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  8. #8
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 179
    Points : 601
    Points
    601

    Par défaut

    OK merci SergioMaster
    Le Savoir c'est le Pouvoir !
    S.Freud

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2011, 12h30
  2. Réponses: 16
    Dernier message: 12/11/2008, 20h36
  3. Réponses: 2
    Dernier message: 16/07/2007, 15h34
  4. Utilisation de cast sans pipelined
    Par rabddoul dans le forum Oracle
    Réponses: 15
    Dernier message: 27/10/2005, 16h20
  5. Utilisation de cast dans de l'héritage
    Par dreamanoir dans le forum C++
    Réponses: 4
    Dernier message: 21/02/2005, 21h01

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