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