Maison > base de données > tutoriel mysql > Comment puis-je calculer efficacement les jours ouvrables entre deux dates dans MySQL sans utiliser de table de jours fériés ?

Comment puis-je calculer efficacement les jours ouvrables entre deux dates dans MySQL sans utiliser de table de jours fériés ?

DDD
Libérer: 2025-01-16 17:54:12
original
411 Les gens l'ont consulté

How Can I Efficiently Calculate Business Days Between Two Dates in MySQL Without Using a Holiday Table?

Fonction de comptage des jours ouvrables MySQL

La fonction NETWORKDAYS() d'Excel peut calculer efficacement le nombre de jours ouvrables entre deux dates spécifiées. Dans MySQL, des fonctions similaires sont souvent nécessaires, en particulier celles qui excluent les jours fériés par souci de simplicité.

Une façon consiste à utiliser l'expression suivante :

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

Pour utiliser efficacement cette expression :

  1. Assurez-vous que la date de fin (@E) n'est pas antérieure à la date de début (@S).
  2. Cette expression fonctionne comme DATEDIFF, si la date de début et la date de fin sont les mêmes, le nombre de jours ouvrés est nul.
  3. Veuillez noter que cette méthode ne prend pas en compte les jours fériés.

La chaîne numérique fournie est construite en créant un tableau de dates de début et de fin, commençant par lundi, disposé en lignes et en colonnes. Le tableau est rempli de zéros en diagonale, indiquant qu'il n'y a pas de jours ouvrables entre le même type de jour (par exemple, du lundi au lundi).

Pour chaque jour, le nombre de jours ouvrés est calculé en se déplaçant en diagonale le long des lignes de droite. Si un jour non ouvrable (week-end) est rencontré, le numéro ne change pas. Sinon, il est incrémenté de 1. Après avoir atteint la fin de la ligne, le compteur se réinitialise et le processus continue jusqu'à ce que la diagonale soit à nouveau atteinte.

Par exemple, en supposant que le samedi et le dimanche sont des jours non ouvrables :

M T W T F S S
M 0 1 2 3 4 4 4
T 4 0 1 2 3 3 3
W 3 4 0 1 2 2 2
T 2 3 4 0 1 1 1
F 1 2 3 4 0 0 0
S 0 1 2 3 4 0 0
S 0 1 2 3 4 4 0

La concaténation des 49 valeurs de ce tableau produit la chaîne utilisée dans l'expression.

Cette solution ne prend pas en compte les jours fériés, mais elle permet de compter efficacement le nombre de jours ouvrés entre deux dates dans MySQL.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal