28 Stimmen

SQL Select Kommende Geburtstage

Ich versuche, eine gespeicherte Prozedur zu schreiben, um Mitarbeiter auszuwählen, die bevorstehende Geburtstage haben.

SELECT * FROM Employees WHERE Birthday > @Today AND Birthday < @Today + @NumDays

Das wird nicht funktionieren, weil das Geburtsjahr Teil des Geburtstags ist. Wenn ich also am 18.09.1983 Geburtstag hatte, liegt das nicht zwischen dem 18.09.2008 und dem 25.09.2008.

Gibt es eine Möglichkeit, den Jahresanteil von Datumsfeldern zu ignorieren und nur Monat/Tage zu vergleichen?

Dies wird jeden Montagmorgen durchgeführt, um die Manager auf bevorstehende Geburtstage aufmerksam zu machen, so dass es möglicherweise den Jahreswechsel überspannen wird.

Hier ist die funktionierende Lösung, die ich schließlich erstellt habe, danke Kogus.

SELECT * FROM Employees 
WHERE Cast(DATEDIFF(dd, birthdt, getDate()) / 365.25 as int)
    - Cast(DATEDIFF(dd, birthdt, futureDate) / 365.25 as int) 
<> 0

-2voto

Stephen Wrighton Punkte 34868

Am besten, Sie addieren die Differenz in Jahren zum GEBURTSTAGsdatum, um alles in diesem Jahr zu machen, und machen dann Ihre Vergleiche

SELECT * FROM Employees WHERE
  DATEADD ( year, YEAR(@Today) - YEAR(@Birthday), birthday) BETWEEN @Today AND @EndDate

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X