So erhalten Sie die Nummer in Monaten zwischen zwei Daten in SQL Server 2005
-
20-09-2019 - |
Frage
Ich habe eine Spalte in meiner SQL Server 2005 -Tabelle 2005, in der die Anzahl der Monate gehalten werden sollte, die ein Mitarbeiter im Dienst war.
Da ich auch das Datum habe, an dem der Mitarbeiter engagiert wurde, möchte ich, dass die Spalte "Monate_in_Service" eine berechnete Spalte ist.
Nun, wenn ich benutze DATEDIFF(month,[DateEngaged],GETDATE())
Da die Formel für die monatelange Berechnungspalte in der Dienstleistung korrekt sind, sind die Ergebnisse manchmal korrekt und in anderen Fällen falsch.
Was wäre der bessere zuverlässige Weg, um die Anzahl der Monate zwischen dem Datum des Datums und dem aktuellen Datum zu erhalten? Welche Formel sollte ich in meiner Computerspalte verwenden?
Lösung
So etwas wie (muss möglicherweise die 1 und 0 tauschen, ungetestete)
datediff(month,[DateEngaged],getdate()) +
CASE WHEN DATEPART(day, [DateEngaged]) < DATEPART(day, getdate()) THEN 1 ELSE 0 END
Datiff messen monatgrenzen, z. 00:00 Zeit am 1. eines jeden Monats, nicht am Tag des Monatsanwalters
Bearbeiten: Nachdem Sie den Kommentar von OP gesehen haben, müssen Sie 1 subtrahieren, wenn der Starttag> Endtag
DATEDIFF (month, DateEngaged, getdate()) -
CASE
WHEN DATEPART(day, DateEngaged) > DATEPART(day, getdate()) THEN 1 ELSE 0
END
Für 20. Dezember bis 13. Januar gibt datier 1 und dann 20> 13, also subtrahieren Sie 1 = null Monate.
Andere Tipps
Gleicher Ansatz wie GBN, aber mit weniger Tastenanschlägen :-)
SELECT
DATEDIFF(MONTH, DateEngaged, GETDATE()) +
CASE
WHEN DAY(DateEngaged) < DAY(GETDATE())
THEN 1
ELSE 0
END
Vielleicht willst du so etwas wie:
(year(getdate())-year([DateEngaged]))*12+(month(getdate())-month([DateEngaged]))
Wenn Sie davon ausgehen, dass dieser Monat 30 Tage lang ist, können Sie auch die Vale runden
round((datediff(day,[DateEngaged],getdate()))/30.00,0)