Maison >base de données >tutoriel mysql >Comment calculer les jours ouvrables entre deux dates dans MySQL (sans jours fériés) ?
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 :
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!