Ermittlung der Anzahl von Tagen bis zum nächsten Geburtstag


Mit dem nachfolgenden SQL-Fragment kann die Anzahl von Tagen bis zum nächsten Geburtstag ermittelt werden (in der Spalte [Birthday] ist das Geburtsdatum hinterlegt):

(CASE WHEN DateAdd(yyyy, DateDiff(yyyy, [Birthday], GetDate()), [Birthday]) <= GetDate() THEN 
DateDiff(d, GetDate(), DateAdd(yyyy, DateDiff(yyyy, [Birthday], GetDate()) + 1, [Birthday])) ELSE 
DateDiff(d, GetDate(), DateAdd(yyyy, DateDiff(yyyy, [Birthday], GetDate()), [Birthday]))
END) AS DaysToBirthday

Möchte man auch die Geburtstage, die in den letzten 3 Tagen stattgefunden haben, kann folgendes SQL-Fragment als WHERE-Bedingung verwendet werden:

((CASE WHEN DateAdd(yyyy , DateDiff(yyyy , [Birthday] , DateAdd(d, -4, GetDate())) , [Birthday]) <= DateAdd(d, -4, GetDate()) THEN
DateDiff(d , DateAdd(d, -4, GetDate()) , DateAdd(yyyy , DateDiff(yyyy , [Birthday] , DateAdd(d, -4, GetDate())) + 1 , [Birthday])) ELSE
DateDiff(d , DateAdd(d, -4, GetDate()) , DateAdd(yyyy , DateDiff(yyyy , [Birthday] , DateAdd(d, -4, GetDate())) , [Birthday]))
END)-4) < 4

Der "Trick" der obigen WHERE-Bedingung besteht darin, das zu vergleichende Datum (das aktuelle Tagesdatum) um 4 Tage in die Vergangenheit zu setzen und das Ergebnis ebenfalls um 4 Tage zu korrigieren. Mit dem Vergleich < 4 wird dann auf +/- 3 Tage eingegrenzt.

 


Posted 30.01.2008 by Markus Diettrich
https://kb.casic.eu/KnowledgebaseArticle10068.aspx