Bonjour,
Je souhaite être à même de déterminer le nombre de jours ouvrés (Lundi à Vendredi) entre 2 dates.
Y a t-il un moyen simple de réaliser cette requête ?
Je suis sur Oracle 11g.
Julien.
Version imprimable
Bonjour,
Je souhaite être à même de déterminer le nombre de jours ouvrés (Lundi à Vendredi) entre 2 dates.
Y a t-il un moyen simple de réaliser cette requête ?
Je suis sur Oracle 11g.
Julien.
Bonjour,
J'ai utilisé le format 'D'.
J'ai une solution par une function pl/sql.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 create or replace function jours_ouvres ( prem date, dern date ) return number is ld_date_courante date; ln_intervalle number(6) := 0; ln_compteur number(6) := 0; begin ln_intervalle := ( dern - prem ) + 1; for k in 1..ln_intervalle loop ld_date_courante := prem + ( k - 1 ); if to_char ( ld_date_courante, 'D' ) in ( '1', '2', '3', '4', '5' ) then ln_compteur := ln_compteur + 1; end if; end loop; return ln_compteur; end;
Code:
1
2
3
4
5
6 select empno, hiredate, date_mutation, jours_ouvres( hiredate, date_mutation ) from jbmemp order by hiredate desc nulls last
C'est ce que je pensais faire mais n'y a t-il rien d'autre du style ce qu'il y a sur excel ?
Merci quand même.
Bonjour,
Peut-être pourrais-tu préciser ce qu'il y a sur Excel que tu voudrais faire ici ?
En quoi la solution précédente ne te convient pas ? Elle répond à ta demande pourtant.
Je pense qu'il fait référence à une fonction sur Excel qui effectue le calcul directement entre deux dates.
Cette fonction a en plus comme paramètre la possibilité d'indiquer une liste de valeurs correspondant à des jours fériés sur l'intevalle.
Pour ORACLE, je ne connais pas l'identique sans passer par du PL/SQL comme indiqué précédemment.
Cordialement
Mon collègue m'avait parlé de joursem mais je ne vois pas comment il peut combiner facilement datediff et joursem sauf à faire de la programmation vba ce qui équivaut à ce que vous proposez.
Je vais donc utiliser la fonction.
Merci.
Julien.
Attention 'd' est déterminer par le NLS_TERRITORY, en fonction de ce paramètre de session lundi est 1 ou 2.
Datetime Format Models
Je conseille plutôt d'utiliser 'DAY' afin de fixer la langue dans le SQL quelque soit les paramêtres de sessions.Citation:
The language in which these values are returned is specified either explicitly with the initialization parameter NLS_DATE_LANGUAGE or implicitly with the initialization parameter NLS_LANGUAGE. The values returned by the YEAR and SYEAR datetime format elements are always in English.
The datetime format element D returns the number of the day of the week (1-7). The day of the week that is numbered 1 is specified implicitly by the initialization parameter NLS_TERRITORY.
L'idéal est d'avoir une table calendrier qui détermine les jours WE, fériés...Code:to_char(ladate, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH')
Un point de départ à améliorer (pour les jours de 01/01/2000 à 31/12/2050):
Code:
1
2
3
4
5
6 create table calendar as select to_date('01/01/2000','dd/mm/yyyy') + rownum as dt, to_char(to_date('01/01/2000','dd/mm/yyyy') + rownum, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH') as jour, case when trim(to_char(to_date('01/01/2000','dd/mm/yyyy') + rownum, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH')) in ('SAMEDI','DIMANCHE') then 'WE' end as WE from dual connect by level <= (to_date('01/01/2051','dd/mm/yyyy') - to_date('01/01/2000','dd/mm/yyyy')) -1
Effectivement, merci Pomalaix pour cette précision, ça m'a permis d'aller vérifier à quoi correspondait FM que je ne connaissais pas :ccool: