您好我的任务是在大型SQL Server 2000数据库上执行一些查询。
我遇到问题的查询是“查找20到40岁之间的人数”
我该怎么做?我以前的查询计算每个人的计数如下:
select count(rid) from people where ...
(......是无关紧要的条件)。我用谷歌搜索了一些,但我发现计算年龄的唯一事情是如此之大以至于我没有看到如何将它嵌入到查询中,或者它是一个我没有创建权限的存储过程。
有人可以帮我吗?
人员表的相关部分是这样的:
RID(unique key) | dateofbirth(datetime) | firstname....
答案 0 :(得分: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
这也可以在没有派生表的情况下编写,如下所示:
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())
答案 1 :(得分:1)
select count(*)
from YourTable
where dateofbirth >= '1970-05-24' and dateofbirth <= '1990-05-24'
根据当前日期调整日期。
答案 2 :(得分:1)
您应该计算构成范围边界的日期,然后使用这些日期。
DECLARE @Today datetime, @StartDate datetime, @EndDate datetime
SET @Today = DateAdd(dd, DateDiff(dd, 0, GetDate()), 0)
SET @StartDate = DateAdd(dd, 1, DateAdd(yy, -40, @Today))
SET @EndDate = DateAdd(yy, -20, @Today)
SELECT *
FROM People
WHERE DateOfBirth BETWEEN @StartDate AND @EndDate
这为您提供了一个可以使用索引的查询。
答案 3 :(得分:0)
你可以这样做: 年(GETDATE()) - 年(dateOfBirth)&gt; 20
答案 4 :(得分:0)
我假设人员表中有出生日期。
粗糙的伪代码。
Select DateDiff(YY, people.DOB. Datetime.NOW) as age
from people
where age....
答案 5 :(得分:0)
因为你总是将年龄表示为整数......
select cast(DateDiff(d, people.dob, GetDate()) / 365.25 as int) As Age