Bonjour à tous,
j'ai besoin de récupérer la date du dernier jour du mois de toute l'année en éliminant les week-ends
merci par avance
Bonjour à tous,
j'ai besoin de récupérer la date du dernier jour du mois de toute l'année en éliminant les week-ends
merci par avance
Avec TO_CHAR(date, 'D') tu as le jour 1=Dimanche, 2:Lundi, ... 7=Samedi
Il suffit que tu testes si le dernier jour du mois est un dimanche tu enlèves 2 jours, si c'est un samedi tu enlèves 1 jour.
Sinon, petit amusement pour avoir tous les derniers jours ouvrés des mois de l'année 2019
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT MAX(d), TO_CHAR(MAX(d), 'FMDAY', 'NLS_DATE_LANGUAGE=french') jour FROM (SELECT TRUNC(SYSDATE, 'RRRR') - 1 + LEVEL d FROM dual connect BY LEVEL < 367) WHERE EXTRACT(YEAR FROM d) = 2019 AND TO_CHAR(d, 'D') NOT IN (1,7) GROUP BY TRUNC(d, 'MM') ORDER BY 1
Dommage de faire un "connect by" sur 366 valeurs pour en retourner 12...
Autre solution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 with dates as ( select add_months(trunc(to_date('2019','YYYY'),'YYYY'),level) - 1 as d from dual connect by level < 13 ) select d as "date", TO_CHAR(d, 'FMDAY', 'NLS_DATE_LANGUAGE=french') as "jour" from ( select d + least(0, 5 - (1 + TRUNC (d) - TRUNC (d, 'IW')) ) as d from dates ) ;
Hélas, les deux requêtes de JeitEmgie et McM ne retournent pas les même valeurs !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 ___MAX(D)______JOUR___ __ ____date_____________jour 31/01/2019____JEUDI____________31/01/2019____JEUDI 28/02/2019____JEUDI____________28/02/2019____JEUDI 30/03/2019____SAMEDI___________29/03/2019____VENDREDI 30/04/2019____MARDI____________30/04/2019____MARDI 31/05/2019____VENDREDI_________31/05/2019____VENDREDI 29/06/2019____SAMEDI___________28/06/2019____VENDREDI 31/07/2019____MERCREDI_________31/07/2019____MERCREDI 31/08/2019____SAMEDI___________30/08/2019____VENDREDI 28/09/2019____SAMEDI___________30/09/2019____LUNDI 31/10/2019____JEUDI____________31/10/2019____JEUDI 30/11/2019____SAMEDI___________29/11/2019____VENDREDI 31/12/2019____MARDI____________31/12/2019____MARDI
merci JeitEmgie c'était une erreur de ma part désolé
mais ici comment on élimine seulement le DIMANCHE et pas le lundi, dans la solution de McM on peut manipuler ici >>avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part AND TO_CHAR(d, 'D') NOT IN (1,7)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 -- LUNDI 1 . -- MARDI 2 . -- MERCREDI 3 . -- JEUDI 4 . -- VENDREDI 5 . -- SAMEDI 6 . -- DIMANCHE 7 .
Partager