在SQL查询中获得多年的年龄

Ear*_*rlz 1 sql sql-server datetime sql-server-2000

您好,我的任务是在大型SQL Server 2000数据库上进行一些查询.

我遇到的问题是"找到20到40岁之间的人数"

我该怎么做?我以前的查询得到每个人的计数看起来像这样:

select count(rid) from people where ... 
Run Code Online (Sandbox Code Playgroud)

(与...无关的条件).我用谷歌搜索了一些,但我发现计算年龄的唯一事情是如此之大以至于我没有看到如何将它嵌入到查询中,或者它是一个我没有创建权限的存储过程.

有人可以帮我弄这个吗?

人员表的相关部分如下:

RID(unique key) | dateofbirth(datetime) | firstname....
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 7

假设生日存储为DateTime

Select Count(*)
From    (
        Select Id, Floor(DateDiff(d, BirthDate, GetDate()) / 365.25) As Age
        From People
        ) As EmpAges
Where EmpAges Between 20 And 40
Run Code Online (Sandbox Code Playgroud)

这也可以在没有派生表的情况下编写,如下所示:

Select Count(*)
From People
Where Floor(DateDiff(d, BirthDate, GetDate()) / 365.25)  Between 20 And 40
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用DateAdd.正如OMG Ponies和ck所提到的,这个将是最有效的一群,因为如果它存在,它将允许在dateOfBirth上使用索引.

Select Count(*)
From People
Where DateOfBirth Between DateAdd(yy, -40, GetDate()) And DateAdd(yy, -20, GetDate())
Run Code Online (Sandbox Code Playgroud)