Heim > Datenbank > MySQL-Tutorial > Wie berechnet man Werktage zwischen zwei Daten in MySQL (ohne Feiertage)?

Wie berechnet man Werktage zwischen zwei Daten in MySQL (ohne Feiertage)?

Barbara Streisand
Freigeben: 2025-01-16 18:10:09
Original
796 Leute haben es durchsucht

How to Calculate Business Days Between Two Dates in MySQL (Without Holidays)?

MySQL-Funktion berechnet die Anzahl der Arbeitstage zwischen zwei Daten (außer Feiertage)

Die Funktion NETWORKDAYS() von Excel kann bequem die Anzahl der Arbeitstage zwischen zwei Daten berechnen, und auch MySQL benötigt eine ähnliche Funktionalität. Obwohl die Handhabung von Feiertagen komplexer ist, ist hier eine vereinfachte Lösung erforderlich, die Feiertage nicht berücksichtigt.

Lösung:

Der folgende Ausdruck berechnet effektiv die Anzahl der Arbeitstage zwischen Startdatum @S und Enddatum @E:

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

Annahmen und Hinweise:

  • Das Enddatum (@E) darf nicht vor dem Startdatum (@S) liegen.
  • Ähnlich wie bei DATEDIFF beträgt die Anzahl der Arbeitstage Null, wenn das Startdatum und das Enddatum gleich sind.
  • Feiertage werden nicht berücksichtigt.

Aufbau einer numerischen Zeichenfolge:

Die Zahlenfolge ist sorgfältig als Tabelle mit Start- und Enddaten aufgebaut, wobei Montag (WOCHENTAG 0) der Startpunkt für Zeilen und Spalten ist. Die diagonale Linie von der oberen linken Ecke zur unteren rechten Ecke ist mit Nullen aufgefüllt, was darauf hinweist, dass zwischen den Daten derselben Woche (z. B. Montag bis Montag) keine Arbeitstage liegen.

Wenn man sich diagonal nach rechts bewegt, hat jeder Tag nur dann eine Arbeitstageanzahl ungleich Null, wenn dieser Tag kein Wochenende ist (arbeitsfreier Tag). Wenn das Ende einer Zeile erreicht ist, geht die Zählung zurück zum Anfang derselben Zeile. Dieser Vorgang wird fortgesetzt, bis die nächste Diagonale erreicht wird.

Verbesserter Ausdruck:

Nach der Änderung lautet der verbesserte Ausdruck:

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

Dieser verbesserte Ausdruck verwendet eine verbesserte numerische Zeichenfolge und liefert so genauere Ergebnisse.

Das obige ist der detaillierte Inhalt vonWie berechnet man Werktage zwischen zwei Daten in MySQL (ohne Feiertage)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage