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 Firebird Discussion :

Ordre du CAST,COALESCE ET ROUND dans un SELECT


Sujet :

SQL Firebird

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

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut Ordre du CAST,COALESCE ET ROUND dans un SELECT
    Bonjour,

    Dans un SELECT j'utilise les fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COALESCE(ROUND(CAST(SUM(CHAMP)AS NUMERIC(15,2)),2),0)  FROM TABLE
    Mise à part le CAST et le SUM qui me sont nécéssaires, que pensez-vous de rajouter le ROUND pour éviter la perte de décimal et le COALESCE pour éviter une donnée NULL. Es-ce que ce n'est pas trop lourd ou bien y-a-t-il mieux que ca ? Les fonctions sont-elles dans le bon ordre ?
    En vous remerciant.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Quel est le type de la colonne à convertir ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    déjà je mettrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ROUND(CAST(SUM(COALESCE(CHAMP,0)AS NUMERIC(15,2)),2)  FROM TABLE
    ensuite je ne suis pas convaincu qu'il faille utiliser de CAST (après tout on a affaires avec des valeurs numériques pour le SUM donc je réduirai en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ROUND(SUM(COALESCE(CHAMP,0),2)  FROM TABLE
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour tout le monde,

    Citation Envoyé par escartefigue
    Quel est le type de la colonne à convertir ?
    Le champ est de type NUMERIC(15,4)

    Citation Envoyé par SergioMaster
    SELECT ROUND(CAST(SUM(COALESCE(CHAMP,0)AS NUMERIC(15,2)),2) FROM TABLE
    Alors c'est l'inverse que j'ai fait.

    SergioMaster, je me fie à votre à longue experience sur FB en optant pour la 2eme solution

    SELECT ROUND(SUM(COALESCE(CHAMP,0),2) FROM TABLE
    Merci !
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par freud Voir le message
    SergioMaster, je me fie à votre à longue experience sur FB en optant pour la 2eme solution
    C'est gentil mais j'ai écrit ça avant de lire qu'il s'agissait d'un champ NUMERIC(15,4) tout dépend donc de ce que vous voulez faire avec l'arrondi un petit test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE TEST (CHAMP NUMERIC(15,4));
    INSERT INTO TEST (CHAMP) VALUES (15.2541);
    INSERT INTO TEST (CHAMP)  VALUES (13.2532);
    INSERT INTO TEST (CHAMP) VALUES (11.4549);
    INSERT INTO TEST (CHAMP) VALUES (NULL);

    SELECT ROUND(SUM(COALESCE(CHAMP,0)),2) FROM TEST arrondi après somme = 39.9600
    SELECT SUM(ROUND(COALESCE(CHAMP,0),2)) FROM TEST arrondi avant somme = 39.9500

    vous remarquerez alors que
    1- SUM d'un NUMERIC(15,4) renvoi un NUMERIC(15,4)
    2- la position de l'arrondi change la donne
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Ah oui, j'aurais dû préciser le type de champ.

    La 1ere variante du SELECT me convient parfaitement afin d’éviter la perte de centimes et supposerais que le CAST serait inutile puisque le ROUND fait le travail. Mais c'est bon à savoir que la position du ROUND donne un résultat différent.
    Encore merci SergioMaster.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/03/2009, 09h53
  2. [Java] cast de classe Java dans une fonction Matlab
    Par steph_ch dans le forum MATLAB
    Réponses: 1
    Dernier message: 14/04/2008, 15h55
  3. Ordre des données dans un select
    Par Kiroukool dans le forum SQL
    Réponses: 1
    Dernier message: 03/07/2007, 08h48
  4. l'ordre des lignes dans un Select
    Par comment_ca dans le forum Oracle
    Réponses: 15
    Dernier message: 05/10/2006, 11h08
  5. Réponses: 6
    Dernier message: 12/09/2006, 18h25

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