假设我有这样的查询:
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中运行时,相同的查询会产生如下语法
20198120发布于 2020-01-23 02:00:15
另一种方法是:
select YEAR(CURDATE()) - YEAR(20000120)一些解释:
currdate()函数返回当前日期Year()函数返回给定日期的年份
正如GMB评论的那样,上面的解决方案将为您的情况返回18,因为此人将有17年零6个月的时间。这将返回年份和月份:
select CONCAT(YEAR(CURDATE()) - YEAR(20020811) -1
, '.'
, ABS(MONTH(CURDATE()) - MONTH(20020811)+1)) as age
FROM customerDetails
WHERE customerid = (SELECT max(customerid)
FROM customerDetails)或者,如果您将其更改为列名道布:
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()连接括号内的参数。确保列道布是插入出生日期的列...
发布于 2020-01-23 01:58:26
在MySQL中减去日期并不能达到预期的效果。它实际上将日期转换为整数,并将它们相减。因此,通常日期2020-01-22会变成整数20200122。这不是你想要的。
计算年龄的一种方法是使用date function TIMESTAMPDIFF(),如下所示:
timestampdiff(year, dob, curdate())发布于 2020-01-23 01:59:46
在SQLServer中,您可以编写DATEDIFF(year, GETDATE(), '2002/08/11')。
https://stackoverflow.com/questions/59865671
复制相似问题