SQL选择查询使用当前日期时间来获取用户年龄?

时间:2015-12-16 12:17:54

标签: sql sql-server sql-server-2008

我想从当前系统日期的表格中找到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

3 个答案:

答案 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

Demo

如果您想要由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-171995-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日的事情。)