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>
Annahmen und Hinweise:
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>
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!