MySQL-获取年龄和两个日期之间的天数

MySQL-获取年龄和两个日期之间的天数,mysql,sql,select,inner-join,datediff,Mysql,Sql,Select,Inner Join,Datediff,我正试图查询一个大约2000万条记录的大型数据库,以获取一些数据。这就是我现在正在处理的问题 SELECT a.user_id, b.last_name, b.first_name, c.birth_date FROM users a INNER JOIN users_signup b ON a.user_id a = b.user_id INNER JOIN users_personal c ON a.user_id a = c.user_id INNER JOIN ( SELECT dist

我正试图查询一个大约2000万条记录的大型数据库,以获取一些数据。这就是我现在正在处理的问题

SELECT a.user_id, b.last_name, b.first_name, c.birth_date FROM users a
INNER JOIN users_signup b ON a.user_id a = b.user_id
INNER JOIN users_personal c ON a.user_id a = c.user_id
INNER JOIN
(
SELECT distinct d.a.user_id FROM users_signup d
WHERE d.join_date >= '2013-01-01' and d.join_date < '2014-01-01'
) 
AS t ON a.user_id = t.user_id
我在尝试从数据库检索其他数据时遇到一些问题。我想在结果表中添加2个额外字段:

我可以得到出生日期,但我想在结果表中得到成员的年龄。数据以“yyyy-mm-dd”的形式存储在users\u personal表中。 我想从一个名为user\u signup的表中,使用join\u date&left\u date格式:yyyy-mm-dd中的数据获取从成员加入到左侧(如果有)的总天数。 试试这个:

SELECT a.user_id, b.last_name, b.first_name, c.birth_date, 
       FLOOR(DATEDIFF(CURRENT_DATE(), c.birth_date) / 365) age, 
       DATEDIFF(b.left_date, b.join_date) workDays
FROM users a
INNER JOIN users_signup b ON a.user_id a = b.user_id
INNER JOIN users_personal c ON a.user_id a = c.user_id
WHERE b.join_date >= '2013-01-01' AND b.join_date < '2014-01-01'
GROUP BY a.user_id

您可以使用datediff函数查找两天之间的天数,如

select datediff(date1,date2) from table


select datediff(curdate(),date2) from table

以年为单位计算当前年龄:

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(DATE(NOW()), birthday)), '%Y') * 1 AS age FROM table_name;
工作原理:

datediffdate1、date2以天为单位给出两个日期之间的差值。请注意,此处“生日”的日期格式为日期:YYYY-MM-DD。 from_days将天转换为日期格式 date_format函数仅提取四位数年份的“%Y”。不要使用“%y”,因为你只能得到两位数的年份,有些人的年龄超过99岁。 将字符串乘以1。这是一个“黑客”。MySQL将把类似“YYYY”的字符串转换成整数。
不太可能在一个月内得到当前的年龄,但有些人可能需要这个

SELECT (DATE_FORMAT(FROM_DAYS(DATEDIFF(DATE(NOW()), birthday)), '%Y') * 1 * 12)
+ (DATE_FORMAT(FROM_DAYS(DATEDIFF(DATE(NOW()), birthday)), '%m') * 1) AS age_in_months
FROM table_name;
工作原理:

大多与以上年龄相同。 年数增加了12倍。地球年有12个月。 在下一步中,月份的提取方式与年份相同,但必须将标志“%Y”更改为“%m”。 最后将两个值相加。
以天为单位获取当前年龄非常简单:

SELECT DATEDIFF(DATE(NOW()), birthday) AS age_in_days FROM table_name;
备选代码:

SELECT
    DATE_FORMAT(age_date, '%Y') * 1 AS age_in_years,
    (DATE_FORMAT(age_date, '%Y') * 1 * 12) + (DATE_FORMAT(age_date, '%m') * 1) AS age_in_months,
    age_in_days
FROM
    (SELECT 
        FROM_DAYS(DATEDIFF(DATE(NOW()), birthday)) AS age_date,
        DATEDIFF(DATE(NOW()), birthday) AS age_in_days
    FROM table_name) AS age_date;

或者你可以这样做

SELECT
    TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age_in_years,
    TIMESTAMPDIFF(MONTH, birthday, CURDATE()) AS age_in_month,
    TIMESTAMPDIFF(DAY, birthday, CURDATE()) AS age_in_days,
    TIMESTAMPDIFF(MINUTE, birthday, NOW()) AS age_in_minutes,
    TIMESTAMPDIFF(SECOND, birthday, NOW()) AS age_in_seconds
FROM
    table_name