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

Développement SQL Server Discussion :

Somme à partir d'un fichier horaire [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Somme à partir d'un fichier horaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme à partir d'une durée heure
    Dans ma table, j'ai une durée qui se présente sous le format HH:mm. ex : 02 h 29

    je créée une colonne A où je souhaiterai récupérer mes heures et les transformer en numériques.
    je créée une colonne B où je souhaiterai récupérer mes minutes et les transformer en numériques.
    Ma troisième colonne C me permettrait de faire l'addition.

    (2 h * 60) + 29 = 149

    Ce résultat obtenu me permettrait de créer un coefficient de durée.

    149/60 = 2.48

    Mon problème est que je n'arrive pas à faire apparaitre les chiffres après la virgule.

    Cordialement.

    Taz

    Taz

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 106
    Points : 28 394
    Points
    28 394
    Par défaut
    Il n'est peut être pas indispensable de créer des colonnes intermédiires pour faire le calcul.
    Quel est le type éclaré de la colonne C ?

    Peux-tu nous montrer la ou les requêtes que tu exécutes ?

  3. #3
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    Je n'ai pas encore créée mes colonnes mais je cherche comment faire.

    Ma donnée de base est :

    CONVERT(VARCHAR,(EE.DH_RETOUR_DISPO-EE.DH_ALERTE),108) ce qui me donne une durée. L'exemple que je vous ai envoyé.

    Merci.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous faites probablement une division avec des INT, ce qui donne un résultat en INTIl faut donc caster au moins l'un de vos opérandes en DECIMALCela dit, vous n'avez pas indiqué la structure de la table, mais je pense que vous faites bien compliqué pour pas grand chose : si comme leur nom semble l'indiquer DH_RETOUR_DISPO et DH_ALERTE, alors vous pouvez directement obtenir la durée en minutes en utilisant la fonction DATEDIFF(minute,DH_RETOUR_DISPO , DH_ALERTE)
    Du coup, DATEDIFF(minute,DH_RETOUR_DISPO , DH_ALERTE) / 60. pourrait vous donner directement le résultat voulu.

  5. #5
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    Effectivement, je n'y avais pas pensé.
    Mais comment je peux faire, pour obtenir mon coefficient, 2 chiffres après la virgule.
    Car jusqu'à présent, les résultats sont toujours xxx, 00

    Merci pour votre aide.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonsoir,
    Pour avoir des résultats avec 2 décimales il faut que le numérateur ou le dénominateur de la division soit de type decimal(un nombre,2), c'est ce que
    aieeeuuuuu a dit
    Donc dans l'exemple de aieeeuuuuu cela donnerait par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEDIFF(minute,DH_RETOUR_DISPO , DH_ALERTE) / Cast(60 as decimal(8,2))
    J'ai mis comme type decimal(8,2) mais je ne sais pas exactement quel nombre mettre à la place de 8. Cela se lit 8 chiffres dont 2 décimales.

    Cordialement
    Soazig

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Taz 31 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme à partir d'une durée heure
    Dans ma table, j'ai une durée qui se présente sous le format HH:mm. ex : 02 h 29
    Vous avez là une erreur de conception.

    En effet à partir du moment ou l'on parle de quantité, vous devriez avoir une vleur numérique et non une chaine de caractères.

    Soit vous voulez réellement stocker une heure (un horaire) et dans ce cas il faut utiliser le type de données TIME qui va de 0h à 23h 59m 59s .9999999, soit vous voulez une quantité de temps (par exemple la durée d'un film en minute, la durée d'un projet en journées, la dure d'une tâche en heures) et vous devez mettre un type entier, réel ou décimal.
    Par exemple lorsque je modélise des quantité de temps je met toujours des heures en FLOAT (1,5 = 1h 30).

    C'est dans la vue SQL qui représente les données de manière cosmétique que l'on utilisera une fonction permettant de présenter l'information de manière plus lisible (c'est pour cela que l'on appelle ces objets des "vues") par exemple :
    FN_CONVERT_HD_HMS que vous trouverez ici : https://sqlpro.developpez.com/cours/sqlserver/udf/

    En attendant, vous pouvez utiliser une UDF pour convertir votre littéral en heure décimale avant de faire la somme :
    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
    20
    21
    22
    CREATE FUNCTION FN_CONVERT_HMS_HD (@HMS VARCHAR(16)) 
    RETURNS FLOAT
    WITH RETURNS NULL ON NULL INPUT
    AS 
     
    BEGIN
     
    DECLARE @H FLOAT
     
    -- heure seulement
    IF CHARINDEX(':', @HMS) = 0
       RETURN CAST(@HMS AS FLOAT); 
     
    -- heure et minutes
    SET @H = CAST(LEFT(@HMS, CHARINDEX(':', @HMS) -1) AS float);
    SET @HMS = RIGHT(@HMS, LEN(@HMS) - CHARINDEX(':', @HMS) );
    SET @H = @H + CAST(@HMS AS float) / 60.0;
     
    RETURN @H;
     
    END
    GO
    A +

  8. #8
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    Ok, cela fonctionne mais il me fait apparaitre le résultat en négatif.

    -2,016666666

    Cordialement.

    Taz

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    inversez les deux colonnes dans la DATEDIFF

  10. #10
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    Ok, merci beaucoup pour votre aide précieuse.

    Cordialement.

    Taz

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

Discussions similaires

  1. Somme d'une même cellule à partir de X fichiers différents
    Par SF12341234 dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 13/07/2016, 16h49
  2. Réponses: 2
    Dernier message: 11/07/2016, 15h46
  3. Réponses: 11
    Dernier message: 04/08/2003, 15h30
  4. [CR] Inserer une image à partir d'un fichier
    Par Gandalf24 dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 23/07/2003, 10h55
  5. creer des decors a partir d'un fichier
    Par NICKO dans le forum DirectX
    Réponses: 2
    Dernier message: 21/09/2002, 09h34

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