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 ?
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>
Pour utiliser efficacement cette expression :
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!