一、使用DATEDIFF函数
DATEDIFF函数可以计算两个日期之间的天数差异。
SELECT DATEDIFF('2019-08-01', '2019-07-01');
这将返回31。两个日期参数的位置可以交换,因为结果取绝对值。
如果需要计算两个时间戳之间的天数差异,则必须将这些时间戳转换为日期。
SELECT DATEDIFF(FROM_UNIXTIME(1567248000), FROM_UNIXTIME(1564569600));
这将返回19,其中1567248000和1564569600分别是2019年9月1日和2019年8月1日的时间戳。
DATEDIFF函数可以计算任意两个日期之间的天数差异,包括过去的日期和将来的日期。
SELECT DATEDIFF('2019-08-01', '2021-08-01');
这将返回-730,因为2019年8月1日是从2021年8月1日倒数的730天。
二、使用TIMESTAMPDIFF函数
TIMESTAMPDIFF函数可以计算两个时间戳之间的差异,并将结果以所需单位返回(秒、分钟、小时、天等)。
SELECT TIMESTAMPDIFF(SECOND, '2019-08-01 00:00:00', '2019-08-01 00:00:30');
这将返回30,因为两个时间戳的差异为30秒。
在计算两个日期之间的差异时,可以将日期转换为UNIX时间戳,并使用TIMESTAMPDIFF函数。为了将TIMESTAMPDIFF函数的结果转换为天数,需要将它除以86400(24小时** 60分钟 * 60秒)。
SELECT TIMESTAMPDIFF(SECOND, '2019-08-01 00:00:00', '2019-08-03 00:00:00') / 86400;
这将返回2,因为8月1日至8月3日之间的天数是2。
三、使用DATEDIFF和DATE_ADD函数结合实现计算天数差异
如果需要计算两个日期之间的时间差异,可以使用DATEDIFF和DATE_ADD函数相结合。
SELECT DATEDIFF(DATE_ADD('2019-08-01', INTERVAL 1 MONTH), '2019-08-01');
这将返回31,因为从2019年8月1日到2019年9月1日(2019年8月有31天)。
可以将日期和时间结合使用,例如计算2019年8月1日13:00与2019年8月2日9:30之间的时间差。
SELECT TIMESTAMPDIFF(HOUR, '2019-08-01 13:00:00', '2019-08-02 09:30:00');
这将返回20,因为13:00到中午12:00是11小时,中午12:00到9:30是9个半小时,总和为20个半小时(20小时)。
总结
MySQL提供了DATEDIFF和TIMESTAMPDIFF函数,可以轻松计算两个日期或时间戳之间的时间差异。DATE_ADD函数可以与DATEDIFF组合使用以计算任何两个日期之间的时间差异。