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

Requêtes MySQL Discussion :

nombre de week end entre 2 dates


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut nombre de week end entre 2 dates
    bonjour à tous,

    Ca fait quelques jours que je me prend la tête sur une requête. Au départ je me suis demandé si je devais faire ce calcul côté BDD ou côté application...

    Du coût je me suis décidé à faire cela sur ma base mysql. Le but de la requête est de calculer le temps passé sur un certain processus. J'ai une date de création et la date actuelle. Je dois connaître le nombre de samedi et dimanche entre ces deux dates...

    Si certain d'entre vous ont déjà eu ce problème ou si une function existe je suis preneur

    merci d'avance

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Je vois au moins 2 problèmes pour écrire cette requête :
    1. la date de début doit être antérieure ou tout au plus égale à la date de fin
    2. si l'une ou l'autre des dates est un samedi ou un dimanche que faut-il comptabiliser ?
    Sinon, en jouant sur les fonctions YEAR() et WEEK() on devrait pouvoir trouver une solution.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    l'idée la plus simple est de te faire une fonction stockée, ce qui va te facilité l'écriture et l'utilisation ensuite dans les requêtes:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    delimiter $$
    drop function if exists weekends$$
    create function weekends(debut date, fin date)
    returns int
    deterministic
    begin
      declare d,i,j,k,l,m int;
      set d=datediff(fin,debut),i=d div 7,j=d-7*i;
      return if(d>0,i+(weekday(debut)>5)+((weekday(fin)>5)or(k>5)),0);
    end$$
    delimiter ;
    -- appel
    select weekends('2012-03-01','2012-04-01');
    si debut>fin alors tu as 0 comme si debut=fin...
    testes si tu veux...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Merci, ça marche très bien, je vais adapter ça pour que ça prenne en compte certains jours fériés !

  5. #5
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    je me suis apperçu d'une petite erreur l'index des jour commençant à 0, c'est 4 le dernier jour hors weekend donc:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    delimiter $$
    DROP FUNCTION IF EXISTS weekends$$
    CREATE FUNCTION weekends(debut date, fin date)
    returns int
    deterministic
    begin
      declare d,i,j,k,l,m int;
      SET d=datediff(fin,debut),i=d div 7,j=d-7*i;
      RETURN IF(d>0,i+(weekday(debut)>4)+((weekday(fin)>4)OR(k>4)),0);
    end$$
    delimiter ;
    -- appel
    SELECT weekends('2012-03-01','2012-04-01');

    pour les jours féries tu crée une table qui les contient et dans la fonction tu comptes les jours fériés qui sont dans l'intervalle avec une syntaxe dans le genre pour mettre le résultat dans une variable v:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(id) into v from ...

    attention ma première fonction compte les weekends pas le nombre de jour en weekend (1 ou 2) qui sont sur l'intervalle sinon il faut modifier la formule


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/02/2019, 14h24
  2. Enlever les week-ends entre deux dates
    Par alitazichibi dans le forum Requêtes
    Réponses: 8
    Dernier message: 13/11/2012, 07h48
  3. Réponses: 1
    Dernier message: 10/08/2006, 14h43
  4. Compter le nombre de jours écoulés entre deux dates
    Par koKoTis dans le forum VBScript
    Réponses: 8
    Dernier message: 07/08/2006, 19h44
  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