Я предполагаю, что и столбец базы данных, и переменная age
содержат данные даты / времени, а не строки.Я также собираюсь предположить, что значения [DOB] гарантированно не содержат компонент времени.
В вашей спецификации отсутствует один элемент данных: контрольная дата.Другими словами, учитывая 23 года и кучу дней рождения, вы хотите знать, какие люди 23 на данную дату .Вы можете предположить, что это будет текущая дата, но здесь мы обобщим ее на переменную.
Родившимся 24 февраля 1989 года сегодня 23 года;кто родился позже, тот моложе.Те, кто родился 24 февраля 1988 года или ранее, сегодня 24 года или старше.Таким образом, желаемый диапазон составляет от 25 февраля 1988 года до 24 февраля 1989 года.
DECLARE @age int
DECLARE @referenceDate date
DECLARE @rangeEnd date
DECLARE @rangeBegin date
SELECT @age = 23
SELECT @referenceDate = GETDATE()
--2012-02-24
SELECT @rangeBegin = DATEADD(day, 1, DATEADD(year, -@age-1, @referenceDate))
--1988-02-25
SELECT @rangeEnd = DATEADD(year, -@age, @referenceDate)
--1989-02-24
-- EDIT: this expression is incorrect; thanks to ypercube for catching the bug
-- SELECT @rangeBegin = DATEADD(day, 1, DATEADD(year, -1, @rangeEnd))
SELECT * FROM <table>
WHERE DOB BETWEEN @rangeBegin AND @rangeEnd