2015-12-01 124 views
0

如何编写SQL查询以数字格式获取最旧的男性年龄,而不是dob格式?获取最早的记录

name dob   date job sex language prof  salary 
------------------------------------------------------------------------- 
mitesh 1981-01-01 2001-01-01 m java architect 3100.00 
ankur 1982-02-02 2001-02-02 m ruby scientist 3200.00 
dhruv 1983-03-03 2001-03-03 m csharp designer 3300.00 
ruchi 1981-01-01 2002-01-01 f php  teacher 4000.00 
+2

你是什么意思*数字格式*?你的意思是他们的年龄?你到目前为止尝试过什么?我们不是代码写作服务。 – Siyual

+0

你的意思是年龄不是dob? – roottraveller

+1

[如何根据出生日期和getDate()]计算年龄(以年计)可能的重复(http://stackoverflow.com/questions/1572110/how-to-calculate-age-in-years-based-在出生日期和getdate) – roottraveller

回答

0

这MySQL查询选择最长的男性和 'DBO' 格式转换到一个年龄

SELECT MAX(TIMESTAMPDIFF(dob, '1970-02-01', CURDATE())) AS age 
FROM dbo.data 
WHERE sex='m' 
+0

感谢它的工作 – Dorjee

1

你可以这样做:

Select top (1) Name, dob, datediff(YY,[dob],getdate()) as Age 
from dbo.YourTableName 
where sex = 'm' 
order by Age Desc 

这将在SSMS

工作
+0

thanx它的工作 – Dorjee

0

age功能

某些数据库(如Postgres)提供age函数来计算一对时间戳之间的时间跨度。传递单个时间戳意味着当前的日期时间将被用作该对中的第二个。

时区

如果你想有一个精确的年龄你可能关心的时区。

例如,巴黎的新日子早于蒙特利尔。因此,如果在午夜左右运行SQL代码,如果代码在具有不同当前默认时区的服务器上运行,则会得到不同的结果。

如果您关心此级别的准确性,请指定配对中的第二个日期。使用一个需要时区来确定当天日期的函数。

String作为日期时间型

理想情况下,你应该存储日期时间值日期时间类型。但我猜在这个问题中,你的日期实际上是一个文本值。

字母顺序=时间顺序

如果日期的出生那列是SQL格式的文本价值,平行于ISO 8601格式,那么它的字母排序也是一个时间顺序排列。所以我们可以直接使用这种排序来找到最古老的值。

LIMIT至获取第一个行

LIMIT的命令截断结果集的行的第一x个。按照出生日期按升序排序意味着我们只会得到第一行。

示例代码

提示:命名列和与结尾下划线SQL其它目的绝对避免了与关键字/保留字的任何碰撞。所以承诺SQL规范。

SELECT name_ , date_of_birth_ , age(timestamp date_of_birth_) AS age_ 
WHERE sex_ = 'm' 
ORDER BY date_of_birth_ ASC 
LIMIT 1 
;