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

SQL Oracle Discussion :

Nombre de jours ouvrés entre 2 dates


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut Nombre de jours ouvrés entre 2 dates
    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.

  2. #2
    Membre actif Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Points : 234
    Points
    234
    Par défaut
    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

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut
    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.

  4. #4
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    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 ~

  5. #5
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Points : 960
    Points
    960
    Par défaut
    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)

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut
    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.

  7. #7
    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
    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
    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.
    Je conseille plutôt d'utiliser 'DAY' afin de fixer la langue dans le SQL quelque soit les paramêtres de sessions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_char(ladate, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH')
    L'idéal est d'avoir une table calendrier qui détermine les jours WE, fériés...
    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

  8. #8
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Je conseille plutôt d'utiliser 'DAY' afin de fixer la langue dans le SQL quelque soit les paramêtres de sessions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_char(ladate, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH')
    fmDAY est encore mieux à mon goût ; il rend inutile le TRIM par la suite, ce qui allège un brin la syntaxe.
    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

  9. #9
    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
    Effectivement, merci Pomalaix pour cette précision, ça m'a permis d'aller vérifier à quoi correspondait FM que je ne connaissais pas

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

Discussions similaires

  1. [Dates] Calcul du nombre de jours ouvrés entre 2 dates
    Par Pokerstar dans le forum Langage
    Réponses: 6
    Dernier message: 16/07/2011, 16h02
  2. Nombre de jours ouvrés entre deux dates
    Par johnson95 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 17/06/2009, 22h12
  3. [Dates] Nombre de jours ouvrés entre deux date
    Par meufeu dans le forum Langage
    Réponses: 1
    Dernier message: 31/01/2007, 17h50
  4. Réponses: 1
    Dernier message: 10/08/2006, 14h43
  5. Nombre de jours ouvrés entre 2 dates
    Par motlerang dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/12/2005, 13h25

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