Я создал UDF несколько лет назад под названием GetJustDate
, который возвращает только дату и удаляет все часы / минуты / секунды / и т. Д.
ALTER FUNCTION [dbo].[GetJustDate] (@DATE datetime)
RETURNS datetime AS
BEGIN
RETURN DATEADD(dd, 0, DATEDIFF(dd, 0, @DATE))
END
Если вы используете это и добавляете 30 дней кэто, вы получите только дату в будущем, которую вы хотите сопоставить ...
DECLARE @FUTURE DATETIME = DATEADD(d, 30, dbo.GetJustDate(@DATE))
Как только у вас есть это, вы можете сравнить дату в строке (после получения только даты) сновая переменная ...
AND dbo.GetJustDate(a.PersonBirthdate) = @FUTURE
В качестве альтернативы, если вы не хотите использовать UDF, просто используйте DATEADD / DATEDIFF напрямую ...
DECLARE @FUTURE DATETIME = DATEADD(dd, 30, DATEDIFF(dd, 0, @DATE))
AND DATEADD(dd, 0, DATEDIFF(dd, 0, a.PersonBirthdate)) = @FUTURE