我有一个场景,我必须在sql中获得年龄介于(10 - 20)之间的用户,我有一个出生日期为dob
的列。通过执行以下查询,我得到所有用户的年龄。
SELECT
FLOOR((CAST (GetDate() AS INTEGER) - CAST(dob AS INTEGER)) / 365.25) AS Age
FROM users
我的问题是如何编写查询以便我可以获得年龄介于10到20之间的用户
答案 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;
答案 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
;