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

PL/SQL Oracle Discussion :

Calculer la différence entre deux dates par mois [10g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Calculer la différence entre deux dates par mois
    Bonjour

    Jai besoin d'aide Pour calculer la différence entre deux date par mois.

    Exemple

    Je reçois les dates suivantes 10/04/2015 et 15/06/2015

    Le résultat devrait être
    Avril - 20 Jours
    Mai - 31 Jours
    Juin - 15 Jours

    l'idée que j'ai pour faire cette fonction, me donne un truc monstrueu et pas très performant .

    vous avez deja eu ce genre de problematique?

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    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 111
    Points : 28 451
    Points
    28 451
    Par défaut
    Si ce sont des dates, une simple soustraction devrait suffire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_DATE('2015-06-15') - TO_DATE('2015-04-20')
    Edit : Je n'avais pas compris le besoin de détailler par mois

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Le plus simple est d'avoir une table calendrier.

    Sinon il est possible de générer la liste des dates entre la date de début et la date de fin afin de faire le décompte regroupé par le mois.

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    On peut le gérer par mois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WITH t AS (SELECT TO_DATE('10/04/2015', 'DD/MM/RRRR') deb, TO_DATE('15/06/2015', 'DD/MM/RRRR') fin FROM dual),
     m AS (SELECT LAST_DAY(ADD_MONTHS(t.deb, LEVEL -1 ))mois FROM t connect BY LEVEL <= TRUNC(MONTHS_BETWEEN(fin, deb)) + 1)
    SELECT TO_CHAR(m.mois, 'FmMonth RRRR', 'NLS_DATE_LANGUAGE=French') mois,
    		LEAST(t.fin, m.mois) - GREATEST(t.deb, TRUNC(m.mois, 'MM')) + 1 nbjours
    FROM m, t
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MOIS	NBJOURS
    Avril 2015	21
    Mai 2015	31
    Juin 2015	15
    Par contre je trouve 21 jours pour avril (le 10 est inclus)

    Requête simplifiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TO_CHAR(ADD_MONTHS(deb, LEVEL -1), 'FmMonth RRRR', 'NLS_DATE_LANGUAGE=French') mois,
    		LEAST(fin, LAST_DAY(ADD_MONTHS(deb, LEVEL -1 ))) - GREATEST(deb, TRUNC(ADD_MONTHS(deb, LEVEL -1 ), 'MM')) + 1 nbjours
    FROM (SELECT TO_DATE('10/04/2015', 'DD/MM/RRRR') deb, TO_DATE('15/06/2015', 'DD/MM/RRRR') fin FROM dual)
    CONNECT BY LEVEL <= TRUNC(MONTHS_BETWEEN(fin, deb)) + 1

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Merci
    Je n'avais jamais utiliser le CONNECT BY
    merci pour ton aide

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

Discussions similaires

  1. [AC-2007] calculer la différence entre deux dates en minutes
    Par sarah12 dans le forum IHM
    Réponses: 5
    Dernier message: 20/07/2010, 15h44
  2. Calculer une différence entre deux dates
    Par attif0709 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/04/2010, 12h06
  3. [AC-2003] Calcul de différence entre deux dates : problème de format
    Par sinifroth dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/01/2010, 15h35
  4. Calcul de différence entre deux dates cas vaut 0
    Par zanoubya dans le forum Débuter
    Réponses: 3
    Dernier message: 25/12/2008, 19h45
  5. 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

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