获得最古老的记录

时间:2015-12-01 16:11:05

标签: sql dob

如何编写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

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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

哪种适用于SSMS

答案 1 :(得分:0)

此MySQL查询选择最早的男性并将“dbo”格式转换为年龄

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

答案 2 :(得分:0)

age功能

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

时区

如果您想要精确的年龄,您可能会关心时区。

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

如果您关心此准确度,请指定该对中的第二个日期。使用带时区的功能来确定今天的日期。

字符串作为日期时间类型

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

按字母顺序排列=按时间顺序

如果出生日期列是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
;