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 :

Calculer la différence entre 2 dates 08:30-08:00


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Calculer la différence entre 2 dates 08:30-08:00
    salut
    je veux calculer le temps écoulé entre 2 dates données, par exemple 08:30-08:00 est avoir comme résultat 02:30
    voici ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 24*to_date('06/09/2007 08:30', 'DD/MM/YYYY HH:MI')
    - to_date('06/09/2007 08:00', 'DD/MM/YYYY HH:MI') FROM dual;
    mais le problème est que cela me donne 2,5 comme résultat ce qui veut dire 2 heures et demie mais moi je veux avoir 02:30
    merci de bien vouloir m'aider

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Il s'agit ici uniquementde mise en forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  TO_CHAR(TO_DATE('06/09/2007 08:30', 'dd/mm/yyyy hh:mi')
                    - TO_DATE('06/09/2007 08:00', 'dd/mm/yyyy hh:mi'), 'hh:mi')
    FROM    DUAL
    ;
    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
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Il s'agit ici uniquementde mise en forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  TO_CHAR(TO_DATE('06/09/2007 08:30', 'dd/mm/yyyy hh:mi')
                    - TO_DATE('06/09/2007 08:00', 'dd/mm/yyyy hh:mi'), 'hh:mi')
    FROM    DUAL
    ;
    Non un intervalle n'est pas une date, mais un nombre de jours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT numtodsinterval(TO_DATE('06/09/2007 08:30'
                                  ,'dd/mm/yyyy hh:mi')
                         - TO_DATE('06/09/2007 08:00'
                                  ,'dd/mm/yyyy hh:mi')
                          , 'DAY') it
    FROM DUAL
    qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IT
    --------------------------------
    +000000000 00:29:59.999999999
    reste ensuite à formater l'intervalle et là c'est la fonction extract qui joue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with t as (SELECT numtodsinterval(TO_DATE('06/09/2007 08:30:00'
                                             ,'dd/mm/yyyy hh24:mi:ss')
                                    - TO_DATE('06/09/2007 08:00:00'
                                             ,'dd/mm/yyyy hh24:mi:ss')
                                     , 'DAY') it
               FROM DUAL)
    select extract(HOUR from it) hr, extract(MINUTE from it) mn
    from t
    qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            HR         MN
    ---------- ----------
             0         29
    pour la nanoseconde qui nous embête fort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with t as (SELECT numtodsinterval(TO_DATE('06/09/2007 08:30:00'
                                             ,'dd/mm/yyyy hh24:mi:ss')
                                    - TO_DATE('06/09/2007 08:00:00'
                                             ,'dd/mm/yyyy hh24:mi:ss')
                                     , 'day') + to_timestamp('1','FF') it
               FROM DUAL)
    select extract(hour from it) hr, extract(minute from it) mn
    from t

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    merci infiniment ^^

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    sinon si je veux calculer la somme d'une colonne qui contient une date sous la forme de 'hh24:mi' ou bien la moyen
    par exe si j'ai les 3 enregistrement suivant
    02:30
    02:40
    02:20

    la somme = 07:30
    et moyen = 02:30

    je fais comment s'il vous plais ?

  6. #6
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597

  7. #7
    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
    8
    9
    10
     
    WITH DATA AS (
       SELECT '20:30' h FROM dual union ALL
       SELECT '20:40' h FROM dual union ALL
       SELECT '02:20' h FROM dual
      )
      SELECT trunc(Sum(To_Number(To_Char(To_Date(h,'HH24:MI'),'SSSSS')))/86400) jours,
             to_char(to_date(mod(Sum(To_Number(To_Char(To_Date(h,'HH24:MI'),'SSSSS'))),86400),'SSSSS'),'HH24:MI') heures
        FROM DATA
    /

Discussions similaires

  1. Calculer la différence entre deux dates
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/12/2007, 08h27
  2. [Access] Calculer la différence entre 2 dates
    Par subnox dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/08/2007, 14h16
  3. [Formule] Calculer la différence entre 2 dates
    Par titof90 dans le forum Excel
    Réponses: 1
    Dernier message: 22/05/2007, 17h07
  4. [Dates] Calculer la différence entre 2 dates
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2007, 13h34
  5. Réponses: 4
    Dernier message: 18/10/2006, 15h48

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