首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有将日期转换为年龄的SQL查询

是否有将日期转换为年龄的SQL查询
EN

Stack Overflow用户
提问于 2020-01-23 01:56:14
回答 3查看 52关注 0票数 0

假设我有这样的查询:

代码语言:javascript
复制
SELECT CURRENT_DATE-DOB as age FROM customerDetails 
WHERE customerid = (SELECT max(customerid) FROM 
customerDetails)

在SQLTE3中,它将客户的出生日期格式(例如2002-08-11 (作为日期字段))转换为他们当前的年龄(例如17岁),我可以为MYSQL查询重复相同的逻辑吗?

当在MYSQL Workbench中运行而不是在DB Broswswer different...because SQLite3中运行时,相同的查询会产生如下语法

代码语言:javascript
复制
20198120
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-23 02:00:15

另一种方法是:

代码语言:javascript
复制
select YEAR(CURDATE()) - YEAR(20000120)

一些解释:

currdate()函数返回当前日期Year()函数返回给定日期的年份

正如GMB评论的那样,上面的解决方案将为您的情况返回18,因为此人将有17年零6个月的时间。这将返回年份和月份:

代码语言:javascript
复制
select CONCAT(YEAR(CURDATE()) - YEAR(20020811) -1 
              , '.'
              , ABS(MONTH(CURDATE()) - MONTH(20020811)+1)) as age
FROM customerDetails 
WHERE customerid = (SELECT max(customerid) 
                    FROM customerDetails)

或者,如果您将其更改为列名道布:

代码语言:javascript
复制
select CONCAT(YEAR(CURDATE()) - YEAR(DOB) -1 
              , '.'
              , ABS(MONTH(CURDATE()) - MONTH(DOB)+1)) as age
FROM customerDetails 
WHERE customerid = (SELECT max(customerid) 
                    FROM customerDetails)

concat()连接括号内的参数。确保列道布是插入出生日期的列...

Here is a DEMO

票数 0
EN

Stack Overflow用户

发布于 2020-01-23 01:58:26

在MySQL中减去日期并不能达到预期的效果。它实际上将日期转换为整数,并将它们相减。因此,通常日期2020-01-22会变成整数20200122。这不是你想要的。

计算年龄的一种方法是使用date function TIMESTAMPDIFF(),如下所示:

代码语言:javascript
复制
timestampdiff(year, dob, curdate())
票数 0
EN

Stack Overflow用户

发布于 2020-01-23 01:59:46

在SQLServer中,您可以编写DATEDIFF(year, GETDATE(), '2002/08/11')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59865671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档