Maison >base de données >tutoriel mysql >Comment calculer les jours ouvrables entre deux dates dans MySQL sans fonction intégrée ?

Comment calculer les jours ouvrables entre deux dates dans MySQL sans fonction intégrée ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-16 17:56:10209parcourir

How to Calculate Working Days Between Two Dates in MySQL Without a Built-in Function?

Comment calculer les jours ouvrés entre deux dates dans MySQL

De nombreux tableurs populaires, tels qu'Excel, fournissent la fonction NETWORKDAYS() pour calculer le nombre de jours ouvrables entre deux dates. Cependant, MySQL n'a pas de fonction intégrée similaire.

Solution : Expression mathématique

Pour calculer le nombre de jours ouvrés entre deux dates dans MySQL, vous pouvez utiliser l'expression suivante :

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

Explication :

  • DATEDIFF(@E, @S) : Calcule la différence en jours entre la date de fin (@E) et la date de début (@S).
  • DIV 7 : Divisez la différence par 7 pour obtenir le nombre de semaines entre les dates.
  • 5 : Multipliez le nombre de semaines par 5 pour obtenir le nombre de jours ouvrés.
  • MID() : extrayez le sous-ensemble de nombres pertinent de la chaîne en fonction de la date de début et de la date de fin. La chaîne spécifique utilisée dans l'expression est construite à partir du nombre de jours ouvrables entre différentes combinaisons de dates de début et de fin.

Hypothèses et limites :

  • La date de fin (@E) ne peut pas être antérieure à la date de début (@S).
  • Cette fonction ignore les jours fériés.
  • Cette expression suppose que lundi est le premier jour de la semaine.

Exemple :

Pour calculer le nombre de jours ouvrables entre le '2023-03-06' (@S) et le '2023-03-10' (@E), vous pouvez utiliser la requête suivante :

<code class="language-sql">SELECT 5 * (DATEDIFF('2023-03-10', '2023-03-06') DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY('2023-03-06') + WEEKDAY('2023-03-10') + 1, 1) AS num_working_days;</code>

Cette requête renverra le nombre de jours ouvrés entre deux dates, soit 5.

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