2015-09-18 77 views
0

即时通讯新的堆栈,所以请容易对我。我看了整个网络,找不到任何真正帮助我的东西。查询个人年龄超过60作为特定日期的SQL查询

因此,我需要提供在计算部门工作的所有普通学者的详细信息,截至2014年12月31日,这些学者的年龄超过60岁的人为 。

我的麻烦来了,我将如何处理显示某人的数据60+你能否从另一个日期减去一个日期?或者有可能我缺少的sql命令。

我尝试:

SELECT * 
FROM staff, department 
WHERE DOB <= '31/12/1964' 
AND staff.department_ID = department.department _ID 
+2

请发表您尝试 –

+0

Appologies我将删除MySQL和粘贴我尝试 – Jason

+0

你不应该使用隐逗号分隔的连接。当SQL-93引入显式连接时,他们已经过时了。 (不过,甲骨文很晚才采纳它们。)请改用'FROM staff JOIN department ON ...'。 Oracle中的日期文字被写入'date'1964-12-31''。您正在使用字符串文字,而不是依靠某些区域设置将该字符串解释为正确的日期。你不应该那样做。除此之外,你的查询应该工作。 –

回答

1

有函数来计算日期之间的区别,但最有效的是,首先计算出一个人的出生是在60 2014-12-31日期。这样你可以直接比较一个值,所以如果有的话,数据库可以使用索引。

举例甲骨文:

select 
    PersonId, FirstName, LastName 
from 
    Person 
where 
    Born <= add_months(date '2014-12-31', -60 * 12) 

例为MySQL(虽然你们删除了MySQL标签):

select 
    PersonId, FirstName, LastName 
from 
    Person 
where 
    Born <= date_sub('2014-12-31' 60 year) 
+0

这是非常丰富的和很大的帮助,非常感谢你! – Jason

+0

因为根据这个,http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions001.htm,Oracle没有dateadd函数。 –

+0

@DanBracuk:更新了查询。这里是我找到dateadd函数的地方:http://sql-plsql.blogspot.se/2010/07/dateadd.html – Guffa

0

我想在SQL Server

选择DATEDIFF(日,'05 -19-2015','05-21-2015')

In My SQL SELECT TIMES TAMPDIFF(HOUR,start_time,end_time) as difference FROM timeattendance WHERE timeattendance_id ='1484'

0

oracle add_months函数将帮助您。

where yourfield < add_months(date '1964-12-31', 60*12) 
+0

你正在为1964-12-31添加60年,这会给你2024-12-31。在写这篇文章时,每个人都活着在2024年之前出生。 – Guffa