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 :

Durée moyenne de plusieurs champs


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Points : 85
    Points
    85
    Par défaut Durée moyenne de plusieurs champs
    Bonjour,

    Peut être que mon intitulé est pas très clair, je m'en excuse par avance.

    Je cherche à faire un différence d'heure entre deux dates, seulement mes deux dates sont dans plusieurs champs en var_char...

    Structure de ma table :

    DATE_ENTREE | HEURE_ENTREE | DATE_SORTIE | HEURE_SORTIE
    01/01/2009 02:13 02/01/2009 15:10

    merci d'avance à tous ce qui me m'aideront par avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    La première chose à faire est de convertir vos dates / heures au format date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH MaTable AS
    (
    select '01/01/2009' as dt_ent, '02:13' as hr_ent, '02/01/2009' as dt_srt, '15:10' as hr_srt from dual
    )
    select to_date(dt_ent || hr_ent, 'dd/mm/yyyyhh24:mi') as dt_ent_full,
           to_date(dt_srt || hr_srt, 'dd/mm/yyyyhh24:mi') as dt_srt_full 
      from MaTable;
     
    DT_ENT_FULL		DT_SRT_FULL
    01/01/2009 02:13:00	02/01/2009 15:10:00
    Ensuite, la soustraction de deux dates fournit une différence en nombre de jour. Il suffit de multiplier par 24 si on veut la différence en heures, par 24*60 si on veut la différence en minutes et ainsi de suite.

    Supposons que vous vouliez la différences en heure / minutes :
    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
    WITH MaTable AS
    (
    select '01/01/2009' as dt_ent, '02:13' as hr_ent, '02/01/2009' as dt_srt, '15:10' as hr_srt from dual
    )
      ,  MaTable2 AS
    (
    select to_date(dt_ent || hr_ent, 'dd/mm/yyyyhh24:mi') as dt_ent_full,
           to_date(dt_srt || hr_srt, 'dd/mm/yyyyhh24:mi') as dt_srt_full
      from MaTable
    )
    select dt_ent_full, dt_srt_full, 
           round((dt_srt_full - dt_ent_full)*24*60, 2) as ecart_min
      from MaTable2;
     
    DT_ENT_FULL		DT_SRT_FULL		ECART_MIN
    01/01/2009 02:13:00	02/01/2009 15:10:00	2217
    Vous pouvez aussi convertir cet écart en intervalle :
    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
    WITH MaTable AS
    (
    select '01/01/2009' as dt_ent, '02:13' as hr_ent, '02/01/2009' as dt_srt, '15:10' as hr_srt from dual
    )
      ,  MaTable2 AS
    (
    select to_date(dt_ent || hr_ent, 'dd/mm/yyyyhh24:mi') as dt_ent_full,
           to_date(dt_srt || hr_srt, 'dd/mm/yyyyhh24:mi') as dt_srt_full
      from MaTable
    )
    select dt_ent_full, dt_srt_full, 
           round((dt_srt_full - dt_ent_full)*24*60, 2) as ecart_min,
           numtodsinterval(round((dt_srt_full - dt_ent_full)*24*60, 2), 'MINUTE') as ecart_int
      from MaTable2;
     
    DT_ENT_FULL		DT_SRT_FULL		ECART_MIN	ECART_INT
    01/01/2009 02:13:00	02/01/2009 15:10:00	2217		+01 12:57:00.000000
    Ou alors l'obtenir en quatre colonnes différentes :
    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 AS
    (
    select '01/01/2009' as dt_ent, '02:13' as hr_ent, '02/01/2009' as dt_srt, '15:10' as hr_srt from dual
    )
      ,  MaTable2 AS
    (
    select to_date(dt_ent || hr_ent, 'dd/mm/yyyyhh24:mi') as dt_ent_full,
           to_date(dt_srt || hr_srt, 'dd/mm/yyyyhh24:mi') as dt_srt_full
      from MaTable
    )
    select dt_ent_full, dt_srt_full,
           trunc(       dt_srt_full-dt_ent_full                 ) as Jour,
           trunc( mod( (dt_srt_full-dt_ent_full)*24      , 24 ) ) as Heure,
           trunc( mod( (dt_srt_full-dt_ent_full)*24*60   , 60 ) ) as Minutes,
           trunc( mod( (dt_srt_full-dt_ent_full)*24*60*60, 60 ) ) as Secondes
      from MaTable2;
     
    DT_ENT_FULL		DT_SRT_FULL		JOUR	HEURE	MINUTES	SECONDES
    01/01/2009 02:13:00	02/01/2009 15:10:00	1	12	56	59

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Points : 85
    Points
    85
    Par défaut
    ça fonction, je te remercie pour autant d'explication

    j'ai juste un peu de mal à comprendre ou place mon order by dt_ent_full mais sinon tout va bien

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

Discussions similaires

  1. [Toutes versions] Moyenne d'un champ sur plusieurs jours
    Par qltmi dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 09/05/2009, 11h07
  2. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41
  3. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55
  4. recuperer les id sur plusieurs champs
    Par matN59 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2004, 10h23
  5. [CR9] Plusieurs champs dans details
    Par maxxou dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 28/01/2004, 13h35

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