Alter abrufen
Aus irgendeinem Grund scheinen wir auf eine große Anzahl von Projekten zu stoßen, bei denen Daten verglichen werden. In dieser Zeit haben wir eine Reihe von Funktionen entwickelt, um die Integrität dieser Daten zu beschleunigen und sicherzustellen.
Der Grund, warum wir dies geschaffen haben, war, dass das Erarbeiten eines Zeitalters, in dem jemand in einem Schaltjahr geboren wurde, zu einer Abweichung von einem Tag führen kann. In einem Schaltjahr ist der 29/02 der gleiche Tag des Jahres wie der 01/03.
Wir verwenden zwei Datumsangaben, da Sie die Uhrzeit, für die Sie das Alter benötigt haben (wie das Sterbedatum), zurückdatieren können. Wenn Sie dieses Feld leer lassen, wird nur das aktuelle Datum als Standarddatum verwendet.
Da wir nicht daran glauben, das Rad neu zu erfinden, haben wir unseren Code hier für alle hinterlassen, die ihn möglicherweise nützlich finden. Dies erfordert eine sekundäre Funktion, die unten verlinkt ist.
CREATE FUNCTION Dates.GetAge(@Date DATETIME2,@Until DATETIME2) RETURNS INT AS BEGINIF @Until IS NULL SET @Until=CONVERT(DATE,GETDATE())DECLARE @Age INT=DATEDIFF(YEAR,@Date,@Until)+(CASE WHEN DATEPART(DAYOFYEAR,@Date)>(DATEPART(DAYOFYEAR,@Until)+(CASE WHEN dbo.GetLeapYear(@Until)=1 AND DATEPART(DAYOFYEAR,@Until)>59 THEN -1 ELSE 0 END))THEN -1 ELSE 0 END)RETURN @AgeENDGO
SELECT Dates.GetAge('2011-02-28','2013-02-27'),Dates.GetAge('2011-02-28','2013-02-28'),Dates.GetAge('2011-02-28','2013-03-01'),Dates.GetAge('2011-02-28','2013-03-02')SELECT Dates.GetAge('2011-02-28','2012-02-27'),Dates.GetAge('2011-02-28','2012-02-28'),Dates.GetAge('2011-02-28','2012-02-29'),Dates.GetAge('2011-02-28','2012-03-01')SELECT Dates.GetAge('2012-02-28','2013-02-27'),Dates.GetAge('2012-02-28','2013-02-28'),Dates.GetAge('2012-02-28','2013-03-01'),Dates.GetAge('2012-02-28','2013-03-02')SELECT Dates.GetAge('2012-02-29','2013-02-27'),Dates.GetAge('2012-02-29','2013-02-28'),Dates.GetAge('2012-02-29','2013-03-01'),Dates.GetAge('2012-02-29','2013-03-02')
Bisherige Tests haben keine Anomalien ergeben. Bitte lassen Sie uns wissen, wenn Sie welche finden.