Этот ответ для SQL Server.
Я создал несколько тестовых данных и не вижу, что не будет работать.
Хороший способ проверить это на своем компьютере - создать временную таблицу с некоторыми примерами данных и посмотреть, как выглядит результат. Это тест, который я использовал;
IF OBJECT_ID('tempdb..#People') IS NOT NULL DROP TABLE #People
CREATE TABLE #People (Name varchar(20), Birthdate datetime)
INSERT INTO #People (Name, Birthdate)
VALUES
('Alice','1997-12-07')
,('Brenda','1998-01-01')
,('Charlie','2001-12-25')
,('Deborah','1997-07-01')
,('Erik','1985-01-01')
SELECT
*
,DATEADD(Month,-6,GETDATE()) AS SixMonthsAgoDate
,DATEDIFF(YEAR, Birthdate, DATEADD(Month,-6,GETDATE())) AgeSixMonthsAgo
,DATEADD(Month,1,DATEADD(Month,6,GETDATE())) SevenMonthsFutureDate
,DATEDIFF(YEAR, Birthdate, DATEADD(Month,7,GETDATE())) AgeSevenMonthsFuture
FROM #People
Последние 4 расчета являются вашими (кроме последнего, вы добавляли 6 месяцев, а затем добавляли 1 месяц отдельно, я изменил его просто на добавление 7 месяцев).
Вывод выглядит так:
Name Birthdate SixMonthsAgoDate AgeSixMonthsAgo SevenMonthsFutureDate AgeSevenMonthsFuture
Alice 1997-12-07 00:00:00.000 2018-12-07 14:38:22.370 21 2020-01-07 14:38:22.370 23
Brenda 1998-01-01 00:00:00.000 2018-12-07 14:38:22.370 20 2020-01-07 14:38:22.370 22
Charlie 2001-12-25 00:00:00.000 2018-12-07 14:38:22.370 17 2020-01-07 14:38:22.370 19
Deborah 1997-07-01 00:00:00.000 2018-12-07 14:38:22.370 21 2020-01-07 14:38:22.370 23
Erik 1985-01-01 00:00:00.000 2018-12-07 14:38:22.370 33 2020-01-07 14:38:22.370 35
Что прекрасно работает для того, что вы пытаетесь сделать.
Не стесняйтесь пробовать приведенный выше запрос, используя ваши фактические данные, чтобы вы могли отладить его самостоятельно. Мы не можем многое сделать здесь при переполнении стека без выборочных данных и ожидаемого результата.
Если вы пытаетесь решить это для месяца рождения людей, то вам лучше всего делать это в месяцах, а не в годах. Как то так;
SELECT
*
,DATEADD(Month,-6,GETDATE()) AS SixMonthsAgoDate
,DATEDIFF(MONTH, Birthdate, DATEADD(Month,-6,GETDATE())) AgeSixMonthsAgo_Months
,DATEADD(Month,1,DATEADD(Month,6,GETDATE())) SevenMonthsFutureDate
,DATEDIFF(MONTH, Birthdate, DATEADD(Month,7,GETDATE())) AgeSevenMonthsFuture_Months
FROM #People
И тогда ваши предложения where будут выглядеть так:
DATEDIFF(MONTH, Birthdate, DATEADD(Month,-6,GETDATE())) = (21 * 12)
и
DATEDIFF(MONTH, Birthdate, DATEADD(Month,7,GETDATE())) = (21 * 12)
или даже упрощенный далее к этому;
DATEDIFF(MONTH, Birthdate, GETDATE()) = (21 * 12) - 6
DATEDIFF(MONTH, Birthdate, GETDATE()) = (21 * 12) + 7