Сочетание датированных () и datepart (). Этот пример учитывает точные даты при определении возраста в годах.
declare @today datetime; set @today=getdate(); --or declare @today date if SQL 2008+
-- Build some sample data
declare @bds table(id int identity(1,1),bd varchar(8));
insert into @bds values ('19730815') --out of range
, ('20070310') --in range when @today is on or after 3/10/2012
, ('20070315') --out of range when @today is before 3/15/2012
, ('20070801') --out of range
, ('20040305') --in range when @today is on or after 3/05/2012
-- Find ages 5 to 15, born in March
select *
, age=DATEDIFF(yyyy,bd,@today)
-Case when DATEADD(yyyy,-DATEDIFF(yyyy,bd,@today),@today)>bd then 0 else 1 end
from @bds
where DATEDIFF(yyyy,bd,@today)
-Case when DATEADD(yyyy,-DATEDIFF(yyyy,bd,@today),@today)>bd then 0 else 1 end
between 5 and 15
and datepart(mm,bd)=3 -- or month(d) in SQL 2008+
Результат, с @ today = 3.12.2012:
id bd age
----------- -------- -----------
2 20070310 5
5 20040305 8