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,
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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
~ Lola ~
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
La SNCF est mon ami
blog PARIS-GRANVILLE
Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)
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.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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Consultant / formateur Oracle indépendant
Certifié OCP 12c, 11g, 10g ; sécurité 11g
Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration
Effectivement, merci Pomalaix pour cette précision, ça m'a permis d'aller vérifier à quoi correspondait FM que je ne connaissais pas
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager