Heim >Datenbank >MySQL-Tutorial >Wie kann ich Geschäftstage zwischen zwei Daten in MySQL effizient berechnen, ohne eine Feiertagstabelle zu verwenden?

Wie kann ich Geschäftstage zwischen zwei Daten in MySQL effizient berechnen, ohne eine Feiertagstabelle zu verwenden?

DDD
DDDOriginal
2025-01-16 17:54:12413Durchsuche

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

MySQL-Arbeitstagzählfunktion

Die Funktion NETWORKDAYS() von Excel kann die Anzahl der Arbeitstage zwischen zwei angegebenen Daten effizient berechnen. In MySQL werden häufig ähnliche Funktionen benötigt, insbesondere eine, die der Einfachheit halber Feiertage ausschließt.

Eine Möglichkeit besteht darin, den folgenden Ausdruck zu verwenden:

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

Um diesen Ausdruck effektiv zu verwenden:

  1. Stellen Sie sicher, dass das Enddatum (@E) nicht vor dem Startdatum (@S) liegt.
  2. Dieser Ausdruck funktioniert wie DATEDIFF. Wenn das Startdatum und das Enddatum gleich sind, ist die Anzahl der Arbeitstage Null.
  3. Bitte beachten Sie, dass diese Methode keine Feiertage berücksichtigt.

Die bereitgestellte numerische Zeichenfolge wird erstellt, indem eine Tabelle mit Start- und Enddaten erstellt wird, beginnend mit Montag, angeordnet in Zeilen und Spalten. Die Tabelle ist diagonal mit Nullen gefüllt, was darauf hinweist, dass zwischen demselben Tagestyp (z. B. Montag und Montag) keine Arbeitstage liegen.

Für jeden Tag wird die Anzahl der Arbeitstage berechnet, indem man sich diagonal entlang der Zeilen nach rechts bewegt. Bei einem arbeitsfreien Tag (Wochenende) ändert sich die Zahl nicht. Andernfalls wird es um 1 erhöht. Nach Erreichen des Zeilenendes wird der Zähler zurückgesetzt und der Vorgang fortgesetzt, bis die Diagonale wieder erreicht ist.

Angenommen, Samstag und Sonntag sind arbeitsfreie Tage:

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

Durch die Verkettung der 49 Werte in dieser Tabelle entsteht die im Ausdruck verwendete Zeichenfolge.

Diese Lösung berücksichtigt keine Feiertage, kann aber die Anzahl der Arbeitstage zwischen zwei Daten in MySQL effizient zählen.

Das obige ist der detaillierte Inhalt vonWie kann ich Geschäftstage zwischen zwei Daten in MySQL effizient berechnen, ohne eine Feiertagstabelle zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn