我想从当前系统日期的表格中找到20到30岁之间的年龄。
以下是我的表格详情:
GivenName DOB
Raj 1950-06-06 00:00:00.000
Rahul 1951-01-06 00:00:00.000
Mohan 1952-11-09 00:00:00.000
khan 1953-07-24 00:00:00.000
答案 0 :(得分:1)
例如,在20到30之间
使用DATEDIFF
:
SELECT Age = DATEDIFF(year, DOB, GetDate()),
Between20_30 = CASE WHEN DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30
Then 'yes' ELSE 'no' END
FROM dbo.Table1
如果您想要由20到30岁之间的人过滤,请使用WHERE
条款:
WHERE DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30
由于DATEDIFF
不准确(将12/31和01/01之间的月差异视为一个月),如果这是一个问题,您可以使用this方法。
答案 1 :(得分:0)
select GivenName,Age = DATEDIFF(year, DOB, GetDate())
FROM [dbo].[AgeCalc] where DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30
答案 2 :(得分:0)
不要使用DATEDIFF
。使用DATEDIFF(year, ...)
时,只考虑日期的年份部分。因此,确切地说哪个生日并不重要,你会考虑20岁时尚未满20岁的人。
今天2015-12-26
您希望在1984-12-17
到1995-12-16
之间出生的人。
1984-12-17
(今天减去31岁加一天)意味着该人明天31岁1995-12-16
(今天减去20年)意味着这个人今天刚满20岁。所以:
select *
from persons
where convert(varchar, dob, 102)
between convert(varchar, dateadd(day, 1, dateadd(year, -31, getdate())), 102)
and convert(varchar, dateadd(year, -20, getdate()), 102);
(我必须承认,我现在懒得想到2月29日的事情。)