Maison >base de données >tutoriel mysql >Comment calculer les jours ouvrables entre deux dates dans MySQL (sans jours fériés) ?

Comment calculer les jours ouvrables entre deux dates dans MySQL (sans jours fériés) ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-16 18:10:09797parcourir

How to Calculate Business Days Between Two Dates in MySQL (Without Holidays)?

La fonction MySQL calcule le nombre de jours ouvrés entre deux dates (hors jours fériés)

La fonction NETWORKDAYS() d'Excel peut facilement calculer le nombre de jours ouvrables entre deux dates, et MySQL a également besoin de fonctionnalités similaires. Bien que la gestion des congés soit plus complexe, il faut ici une solution simplifiée qui ne prenne pas en compte les congés.

Solution :

L'expression suivante calcule efficacement le nombre de jours ouvrés entre la date de début @S et ​​la date de fin @E :

<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>

Hypothèses et notes :

  • La date de fin (@E) ne peut pas être antérieure à la date de début (@S).
  • Semblable à DATEDIFF, si la date de début et la date de fin sont les mêmes, le nombre de jours ouvrables sera nul.
  • Les jours fériés ne sont pas pris en compte.

Construction d'une chaîne numérique :

La chaîne numérique est soigneusement construite sous la forme d'un tableau de dates de début et de fin, avec le lundi (JOUR SEMAINE 0) comme point de départ pour les lignes et les colonnes. La ligne diagonale allant du coin supérieur gauche au coin inférieur droit est complétée par des zéros, indiquant qu'il n'y a pas de jours ouvrables entre les dates d'une même semaine (par exemple, du lundi au lundi).

En diagonale vers la droite, chaque jour a un nombre de jours ouvrables non nul uniquement si ce jour n'est pas un week-end (jour non ouvrable). Lorsque la fin d'une ligne est atteinte, le décompte remonte au début de la même ligne. Ce processus se poursuit jusqu'à ce que la diagonale suivante soit rencontrée.

Expression améliorée :

Après modification, l'expression améliorée est :

<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>

Cette expression améliorée utilise une chaîne numérique améliorée, fournissant des résultats plus précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn