从sql中的出生日期开始

时间:2016-03-19 10:48:48

标签: sql

我有一个场景,我必须在sql中获得年龄介于(10 - 20)之间的用户,我有一个出生日期为dob的列。通过执行以下查询,我得到所有用户的年龄。

SELECT 
    FLOOR((CAST (GetDate() AS INTEGER) - CAST(dob AS INTEGER)) / 365.25) AS Age     
FROM users

我的问题是如何编写查询以便我可以获得年龄介于10到20之间的用户

6 个答案:

答案 0 :(得分:4)

我现在没有可用于测试的SQL-Server。我会尝试类似的事情:

select * from users where datediff(year, dob, getdate()) between 10 and 20;

答案 1 :(得分:1)

首先像你已经做的那样添加计算字段Age。然后对数据进行过滤。

SELECT * FROM
   (SELECT FLOOR((CAST (GetDate() AS INTEGER) - CAST(dob AS INTEGER)) / 365.25) AS Age, * 
   from users) as users
WHERE Age >= 10 AND Age < 20

number of ways来计算年龄。

答案 2 :(得分:1)

您可以尝试以下操作:

SELECT * FROM TableName 
WHERE DATEDIFF(year, dob, getdate()) between @dob and @currentDate;

OR

SELECT DATEDIFF(day,'2014-06-05','2014-08-05') AS DiffDate;

参考:http://www.w3schools.com/sql/func_datediff.asp 或者

http://sqlhints.com/2015/07/10/how-to-get-difference-between-two-dates-in-years-months-and-days-in-sql-server/

答案 3 :(得分:0)

以下查询应返回用户:

SimpleXMLElement

答案 4 :(得分:0)

您可以简单地将WHERE条件更改为:

,而不是计算每个用户的年龄
where dob between cast(dateadd(year, 20, getdate()) as date)
              and cast(dateadd(year, 10, getdate()) as date)

现在它是sargable表达式,可能会使用索引。

答案 5 :(得分:0)

我发现这个问题试图找出非常相似的东西。我对SQL非常陌生,并且发现了关于从出生日期开始计算年龄的讨论here

我已将其中一个答案改编成:我认为它有效。

SELECT
    (0 + Convert(Char(8),GETDATE(),112) - Convert(Char(8),dob,112)) / 10000 AS Age
FROM
users
WHERE
    (0 + Convert(Char(8),GETDATE(),112) - Convert(Char(8),dob,112)) / 10000 BETWEEN 10 and 20
;