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 :

Date. Soustraire 1 jour et trouver dernier jour du mois de l'année suivante [11g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 122
    Points : 54
    Points
    54
    Par défaut Date. Soustraire 1 jour et trouver dernier jour du mois de l'année suivante
    Je ne fait pas beaucoup de PL/SQL. Je cherche comment je peux dans les cas suivants, obtenir le code qui permet de faire la gestion de ces dates. J'ai regardé dans les fonctions qui existes et je ne trouve pas laquelle je pourrais utiliser.

    Exemple 1 : J'ai une date de départ 2015-02-26
    Je veux soustraire 1 jour et que le résultat me donnera 2016-02-29. En enlevant 1 jour (25) à la date de départ, on demeure dans le même mois alors je vais chercher le dernier jour du mois en contexte. J'ajoute 1 ans par la suite.

    Exemple 2 : J'ai une date de départ 2015-03-01
    Je veux soustraire 1 jour et que le résultat me donnera 2016-02-29. En enlevant un jour, je tombe à la derniere date du mois précédent soit le 29 février. J'ajoute un an par la suite.

    Merci beaucoup!
    Jake000111

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> with t as (
      2  select date '2015-02-26' as dte from dual union all
      3  select date '2015-03-01' as dte from dual
      4  )
      5  select dte, last_day(add_months(dte-1,12)) as ld
      6    from t;
     
    DTE      LD
    -------- --------
    26/02/15 29/02/16
    01/03/15 29/02/16
     
    SQL>

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 122
    Points : 54
    Points
    54
    Par défaut
    Pour que ça fonctionne pour n'importe quelle date qui est passé en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select last_day(add_months(to_date('2015-02-26','YYYY-MM-DD')-1,12)) from dual;
    .

    Merci beaucoup!
    Jake000111

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 122
    Points : 54
    Points
    54
    Par défaut
    Je dois ajouter un élément en gardant la logique précédente.

    Le code précédent est pour ajouter 1 an à la date obtenue.
    Il peut arriver que ce soit que des mois qu'on ajoute et non juste 1 an.

    En plus d'utiliser une date de départ, j'utilise une date d'expiration ainsi qu'une date de début.

    Exemple :
    Date expiration : 15-05-2015
    Date de début : 17-02-2015
    Date de départ : 22-02-2015

    Je dois faire au début la soustraction (date d'expiration 15-05-2015) - (date de début 17-02-2015) pour récupérer le nombre de mois entre les deux (3 mois) et on ne s'occupe pas des jours. Ensuite j'applique la logique précédente -1 jour à la date de départ, et dernier jour du 3 mois ajoutés à la date de départ (22-02-2015) ce qui devrait me donner 29-05-2015.
    Dans le cas que la date de départ serait 01-02-2015 le résultat serait 30-04-2015.

    Ce code fonctionnait à merveille pour le cas de 1 an
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select date '2015-02-26' as dte from dual union all
               select date '2015-03-01' as dte from dual
               )
               select dte, last_day(add_months(dte-1,12)) as ld
               from t;
    Est-ce que je peux utiliser le même code que précédent en y ajoutant cette logique? Finalement au lieu que ce soit sur 12 mois, je le fais sur un nombre de mois déterminé?


    Merci beaucoup!
    Jake000111

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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
    SQL> with t as (
      2  select to_date('22-02-2015','dd-mm-yyyy') as date_depart
      3       , to_date('17-02-2015','dd-mm-yyyy') as date_debut
      4       , to_date('15-05-2015','dd-mm-yyyy') as date_expiration
      5    from dual
      6  )
      7  select t.*
      8       , last_day(add_months(date_depart-1,months_between(trunc(date_expiration,'MM'),trunc(date_depart,'MM')))) as ld
      9       , trunc(sysdate,'MM')
     10    from t;
     
    DATE_DEP DATE_DEB DATE_EXP LD       TRUNC(SY
    -------- -------- -------- -------- --------
    22/02/15 17/02/15 15/05/15 31/05/15 01/04/15
     
    SQL>
    Le dernier jour du mois de mai n'étant pas le 29...

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 122
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup skuatamad!!!
    Ça fonctionne exactement comme je le souhaitais!
    Jake000111

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/02/2014, 18h11
  2. Trouver le dernier jour du mois précédant la date entrée
    Par lolafrite dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/12/2010, 12h01
  3. Réponses: 2
    Dernier message: 29/07/2008, 17h03
  4. Trouver dernier jour du mois
    Par Mimiche dans le forum Langage
    Réponses: 9
    Dernier message: 09/01/2008, 16h28
  5. Réponses: 3
    Dernier message: 06/09/2006, 17h22

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