Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Wählen Sie Anstehende Geburtstage aus

Hinweis:Ich habe dies bearbeitet, um einen meines Erachtens erheblichen Fehler zu beheben. Die aktuell gepostete Version funktioniert für mich.

Dies sollte funktionieren, nachdem Sie die Feld- und Tabellennamen so geändert haben, dass sie Ihrer Datenbank entsprechen.

SELECT 
  BRTHDATE AS BIRTHDAY
 ,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25) AS AGE_NOW
 ,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25) AS AGE_ONE_WEEK_FROM_NOW
FROM 
  "Database name".dbo.EMPLOYEES EMP
WHERE 1 = (FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25))
          -
          (FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25))

Im Grunde wird die Anzahl der Tage von ihrem Geburtstag bis jetzt ermittelt und durch 365 dividiert (um Rundungsprobleme zu vermeiden, die bei der direkten Umrechnung in Jahre auftreten).

Dann erhält es die Anzahl der Tage von ihrem Geburtstag bis zu einer Woche ab jetzt und dividiert diese durch 365, um ihr Alter in einer Woche ab jetzt zu erhalten.

Wenn ihr Geburtstag innerhalb einer Woche liegt, beträgt die Differenz zwischen diesen beiden Werten 1. Daher werden alle diese Datensätze zurückgegeben.