是否有将日期转换为年龄的 SQL 查询
Posted
技术标签:
【中文标题】是否有将日期转换为年龄的 SQL 查询【英文标题】:Is there an SQL query to convert a date to an age 【发布时间】:2020-01-22 17:56:14 【问题描述】:假设我有这个查询:
SELECT CURRENT_DATE-DOB as age FROM customerDetails
WHERE customerid = (SELECT max(customerid) FROM
customerDetails)
在 SQLTE3 中转换了客户的出生日期 以例如格式2002-08-11(作为日期字段)到他们当前的年龄,例如17,我可以对 mysql 查询重复相同的逻辑吗...
语法是否不同...因为相同的查询在 MYSQL Workbench 而不是 SQLite3 的 DB Broswswer 中运行时会产生这种情况
20198120
【问题讨论】:
你想要这个解决方案在 mysql 中吗? 检查这个答案。https://***.com/questions/10506731/get-difference-in-years-between-two-dates-in-mysql-as-an-integer
这个答案彻底解决了这个问题:***.com/questions/48756627/…
【参考方案1】:
另一种方法是:
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)
或者如果您使用列名 DOB 更改它:
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()
连接括号内的参数。
确保 DOB 列是插入出生日期的列...
Here is a DEMO
【讨论】:
这没有考虑日期和月份,所以它的行为就像每个人都是在 1 月 1 日出生的。 感谢@GMB,将解决方案更改为可能有帮助的解决方案...干杯! 当您告诉我包含 WHERE customerid = SELECT max(customerid) FROM customerDetails 时,我将标记为正确 @grimReaperZ,我已经更新了我的答案。请不要忘记您现在也可以投票,因为您有超过 15 分。如果有问题请告诉我...【参考方案2】:在 SQLServer 中你可以写DATEDIFF(year, GETDATE(), '2002/08/11')
。
【讨论】:
【参考方案3】:在 MySQL 中减去日期并不符合您的预期。它实际上将日期转换为整数,然后减去它们。所以通常日期2020-01-22
变成整数20200122
。这不是你想要的。
计算年龄的一种方法是使用date function TIMESTAMPDIFF()
,如下所示:
timestampdiff(year, dob, curdate())
【讨论】:
以上是关于是否有将日期转换为年龄的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章