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

Oracle Discussion :

[Oracle8] calcul entre 2 dates


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut [Oracle8] calcul entre 2 dates
    Bonjour,

    J'ai une table qui permet de tracer des evenements. Voici la liste des champs qui m'intéresse :
    Date de début : DATE
    Milliseconde de la date de début : NUMBER
    Date de fin : DATE
    Milliseconde de la date de fin : NUMBER

    Je dois calculer le temps de traitement, donc date de fin - date de début, mais je dois prendre en compte les millisecondes aussi.

    Peut-on convertir une date en secondes? Comme ça, après je rajoute les millisecondes au résultat et je fais la différence

    Merci de votre aide

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_CHAR( v_date, 'SSSSS')
    qui te donne le nb de seconde par jour

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    date1 - date2 = nb de jours -> *24*60*60 pour l'avoir en seconde

  4. #4
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut
    OK c cool merci bien

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    salut

    je rebondis sur ce post car j'ai le même problème
    je voudrais faire la différence entre 2 dates dans un SELECT sans autre traitement

    j'avais une solution qui fonctionne, mais seulement si les 2 dates sont dans la même journée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT
    TO_CHAR( TO_DATE( TO_CHAR(date2,'SSSSS') - TO_CHAR(date1, 'SSSSS'), 'SSSSS'), 'HH24:MI:SS')
    FROM DUAL
    ici, j'ai la durée en heure, min, sec sauf si les 2 dates sont dans la même journée (puisque dans ce cas la soustraction donne un résultat négatif et ça plante)

    je me suis penché sur la soustraction directe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  (date2 - date1)*24*3600
    FROM DUAL;
    me donne les secondes, soit, mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  TO_CHAR((date2 - date1)*24*3600,'SSSSS')
    FROM DUAL;
    ne fonctionne pas
    je voudrais, à partir du nombre de seconde et dans la même requête remettre un format HH24:MI:SS, et je tourne en rond...

    une idée?
    merci

  6. #6
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par GoLDoZ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  TO_CHAR((date2 - date1)*24*3600,'SSSSS')
    FROM DUAL;
    ne fonctionne pas
    Normal (date2 - date1)*24*3600 est un nombre or tu essaies de lui appliquer un format date.

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select to_char (to_date ((date1-date2) * 24 *3600, 'SSSSS'), 'HH24:MI:SS')
    from dual;
    NB: Il me semble (à tester) qu'il ne faut pas que ta différence entre date1 et date2 dépasse 24h, soit 86400s.

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Le 'SSSSS' te donnes le nb de secondes depuis le début de la journée.
    Mieux vaut l'utiliser dans des cas spéciaux, j'avais pas trop compris la question du départ.
    Pour ton problème : Que veux tu lorsque tu as date2 < date1 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TO_CHAR(TRUNC(SYSDATE) + (datedepart - datefin), 'HH24:MI:SS') AS duree
    FROM DUAL
    te donne la durée en HH24:MI:SS mais si date2 = date1 - 1 minutes alors ça te mettra 23:59:00

    Si tu veux du genre "-163h45m18s", faut le faire en char, voici un exemple à améliorer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT datedepart, datefin, 
    	TO_CHAR(TRUNC(SYSDATE) + (datefin - datedepart), 'HH24:MI:SS') AS diff,
    	TRUNC((datefin - datedepart) * 24,0) AS heure,
    	LPAD(ABS(TRUNC(MOD((datefin - datedepart) * 24*60,60),0)),2,'0') AS minutes,
    	LPAD(ABS(ROUND(MOD((datefin - datedepart) * 24*60*60,60),0)),2,'0') AS sec 
    FROM MATABLE

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par plaineR
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select to_char (to_date ((date1-date2) * 24 *3600, 'SSSSS'), 'HH24:MI:SS')
    from dual;
    NB: Il me semble (à tester) qu'il ne faut pas que ta différence entre date1 et date2 dépasse 24h, soit 86400s.
    cette solution me va très bien, c'est ce que je cherchais, je devais être fatigué pour ne pas avoir vu cela
    et la différence ne dépassera pas 24h, donc no pb

    merci à tous les 2

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

Discussions similaires

  1. [Dates] calcul entre deux dates
    Par angeblanc22 dans le forum Langage
    Réponses: 6
    Dernier message: 16/03/2007, 12h42
  2. calcul entre 2 dates
    Par francky22 dans le forum SQL
    Réponses: 10
    Dernier message: 22/12/2006, 16h04
  3. [Date] Calcul entre deux dates
    Par djodjo dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 14/09/2006, 14h32
  4. [Dates] Calcul entre 2 dates
    Par Smash34 dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2006, 12h20
  5. Calcul entre deux dates heures
    Par Isa31 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/03/2005, 13h17

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