Uwaga:edytowałem to, aby naprawić to, co uważam za znaczący błąd. Obecnie opublikowana wersja działa dla mnie.
Powinno to zadziałać po zmodyfikowaniu nazw pól i tabel tak, aby odpowiadały Twojej bazie danych.
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))
Zasadniczo pobiera liczbę dni od ich urodzin do chwili obecnej i dzieli ją przez 365 (aby uniknąć problemów z zaokrąglaniem, które pojawiają się podczas konwersji bezpośrednio na lata).
Następnie otrzymuje liczbę dni od ich urodzin do tygodnia od teraz i dzieli to przez 365, aby uzyskać ich wiek za tydzień od teraz.
Jeśli data urodzin przypada w ciągu tygodnia, różnica między tymi dwiema wartościami będzie wynosić 1. Zwraca więc wszystkie te rekordy.