Wie Stell ich das um ein paar Tag ohne Wochenenden mit SQL Server?
Beispiel:
@dtBegin = '2012-06-29'
@input = 20
Möchte ich die Ausgabe '2012-07-27'
.
- mögliche Duplikate von Add Werktage nach Datum in SQL ohne Schleifen
- Siehe diese Frage. Edit: ich bin mir ziemlich sicher, dass diese Frage beantwortet diese genau.
- Haben Sie dies erlebt ? Verwenden von Dateadd() zu ignorieren, Wochenende : MSDN-Artikel
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun, ohne Rückgriff auf eine Kalender-Tabelle oder eine benutzerdefinierte Funktion:
Ich sage ja nicht, das ist schön. Aber manchmal arithmetische besser ist als ein join oder eine Schleife.
addWeekdays
oder somesuch.case
Ausdruck, wenn Sie wie Verschleierung!abs(ceiling(@input%5 + datepart(dw, @dtbegin)%7 - 3) / 3 * 3 / 2.0))
Ich zu bewältigen hatte das gleiche problem in meinem Projekt. Gordon Lionoff die Lösung hat mich auf die richtige Spur, aber nicht immer zum richtigen Ergebnis. Ich muss auch berücksichtigt werden Datumsangaben, die den start in ein Wochenende. I. e. hinzufügen von 1 Werktag auf einen Samstag oder Sonntag ist ein Montag. Dies ist der häufigste Ansatz zur Behandlung von business-Tag der Berechnung.
Habe ich meine eigene Lösung basierend auf Gordon Linoff Funktion und Patrick McDonald ' s ausgezeichnete C# - äquivalent
HINWEIS: Meine Lösung funktioniert nur, wenn DATEFIRST festgelegt ist auf den Standardwert von 7. Wenn Sie einen anderen DATEFIRST Wert, müssen Sie ändern die
1
,7
und(1,7,8,9,10)
bits.Meine Lösung besteht aus zwei Funktionen. Eine "äußere" Funktion, die Griffe Grenzfälle und eine "innere" Funktion führt die eigentliche Berechnung. Beide Funktionen sind Funktionen mit Tabellenrückgabe, so dass Sie eigentlich erweitert werden, in der Implementierung von Abfrage-und fed durch den query optimizer.
Wie Sie sehen können, die "äußere" Funktion behandelt:
_
Den "inneren" Funktion ist ähnlich wie Gordon Linoff Lösung, außer es Konten für Termine Kreuzung Wochenende Grenzen aber ohne überfahrt eine ganze Woche Grenze.
Schließlich erstellte ich eine test-Skript zu testen, meine Funktion. Die erwarteten Werte wurden generiert mit Patrick McDonald ' s ausgezeichnete C# - äquivalent und ich zufällig Querverweise auf diese Daten mit dieser beliebte Rechner.
Dies ist, was ich versucht habe:
Wo
Holiday
ist eine Tabelle mitholiday_date
als Referenz für den Urlaub.