您好,我的任务是在大型SQL Server 2000数据库上进行一些查询。
我遇到的查询是“查找20至40岁之间的人数”
我该怎么做?我先前的查询是为了统计每个人的情况,如下所示:
select count(rid) from people where ...
(与…是无关紧要的条件)。我已经在Google上进行了搜索,但是我发现用于计算年龄的唯一内容是如此之大,以至于我看不到如何将其嵌入查询中,或者它是我没有创建权限的存储过程。
有人可以帮我弄这个吗?
人员表的相关部分如下所示:
RID(unique key) | dateofbirth(datetime) | firstname....
假设生日存储为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
也可以在没有派生表的情况下这样编写:
Select Count(*) From People Where Floor(DateDiff(d, BirthDate, GetDate()) / 365.25) Between 20 And 40
还有一种方法是使用DateAdd。正如OMG Ponies和ck所提到的,这将是最有效的方法,因为它可以使用dateOfBirth上的索引(如果存在的话)。
Select Count(*) From People Where DateOfBirth Between DateAdd(yy, -40, GetDate()) And DateAdd(yy, -20, GetDate())