在 MySQL 中,对两个时间进行加减操作常常涉及以下两种情况:
- 对时间进行加减(即一个时间点加上或减去时间间隔)
- 计算两个时间之间的差异(即两个时间点相差多少时间)
下面我们详细介绍这两种情况的实现方法。
一、时间加减操作
1. 使用 DATE_ADD()
函数进行加法操作
DATE_ADD()
用于在指定的日期或时间上加上一个时间间隔。
语法:
DATE_ADD(date, INTERVAL expr unit)
date
:要操作的日期或时间。expr
:表示要加的时间间隔(一个整数)。unit
:时间单位(如:SECOND
、MINUTE
、HOUR
、DAY
、MONTH
、YEAR
等)。
示例:
- 加 1 天
SELECT DATE_ADD('2025-10-09', INTERVAL 1 DAY);
-- 结果: 2025-10-10
- 加 3 小时
SELECT DATE_ADD('2025-10-09 12:30:00', INTERVAL 3 HOUR);
-- 结果: 2025-10-09 15:30:00
- 加 2 个月
SELECT DATE_ADD('2025-10-09', INTERVAL 2 MONTH);
-- 结果: 2025-12-09
2. 使用 DATE_SUB()
函数进行减法操作
DATE_SUB()
用于从指定的日期或时间中减去一个时间间隔。
语法:
DATE_SUB(date, INTERVAL expr unit)
date
:要操作的日期或时间。expr
:表示要减去的时间间隔(一个整数)。unit
:时间单位(如:SECOND
、MINUTE
、HOUR
、DAY
、MONTH
、YEAR
等)。
示例:
- 减去 1 天
SELECT DATE_SUB('2025-10-09', INTERVAL 1 DAY);
-- 结果: 2025-10-08
- 减去 3 小时
SELECT DATE_SUB('2025-10-09 12:30:00', INTERVAL 3 HOUR);
-- 结果: 2025-10-09 09:30:00
- 减去 2 个月
SELECT DATE_SUB('2025-10-09', INTERVAL 2 MONTH);
-- 结果: 2025-08-09
二、计算两个时间之间的差异
1. 计算两个日期的差异(DATEDIFF()
)
DATEDIFF()
函数计算两个日期之间的天数差。
语法:
DATEDIFF(date1, date2)
date1
:第一个日期。date2
:第二个日期。
示例:
- 计算两个日期的天数差
SELECT DATEDIFF('2025-10-09', '2025-09-30');
-- 结果: 9
2. 计算两个日期时间的差异(TIMESTAMPDIFF()
)
TIMESTAMPDIFF()
函数返回两个时间戳(日期或时间)之间的差异,可以指定返回结果的单位(如秒、分钟、小时、天、月等)。
语法:
TIMESTAMPDIFF(unit, datetime1, datetime2)
unit
:时间单位,指定结果的单位,常用的单位包括:SECOND
、MINUTE
、HOUR
、DAY
、MONTH
、YEAR
等。datetime1
:第一个日期时间。datetime2
:第二个日期时间。
示例:
- 计算两个时间戳之间的小时数差
SELECT TIMESTAMPDIFF(HOUR, '2025-10-09 12:00:00', '2025-10-09 15:00:00');
-- 结果: 3
- 计算两个时间戳之间的天数差
SELECT TIMESTAMPDIFF(DAY, '2025-10-09', '2025-10-15');
-- 结果: 6
- 计算两个日期之间的月数差
SELECT TIMESTAMPDIFF(MONTH, '2025-10-09', '2025-12-09');
-- 结果: 2
三、时间戳和日期的转换
1. 将日期转换为时间戳(UNIX_TIMESTAMP()
)
UNIX_TIMESTAMP()
函数将一个日期或时间转换为时间戳(自 1970 年 1 月 1 日以来的秒数)。
示例:
SELECT UNIX_TIMESTAMP('2025-10-09 12:30:00');
-- 结果: 1665305400
2. 将时间戳转换为日期(FROM_UNIXTIME()
)
FROM_UNIXTIME()
函数将时间戳转换为日期。
示例:
SELECT FROM_UNIXTIME(1665305400);
-- 结果: 2025-10-09 12:30:00
四、总结
操作 | 函数/语法 | 示例 |
---|---|---|
日期加法 | DATE_ADD() | DATE_ADD('2025-10-09', INTERVAL 2 MONTH) |
日期减法 | DATE_SUB() | DATE_SUB('2025-10-09', INTERVAL 1 DAY) |
计算日期差 | DATEDIFF() | DATEDIFF('2025-10-09', '2025-09-30') |
计算日期时间差 | TIMESTAMPDIFF() | TIMESTAMPDIFF(DAY, '2025-10-09', '2025-10-15') |
日期转时间戳 | UNIX_TIMESTAMP() | UNIX_TIMESTAMP('2025-10-09') |
时间戳转日期 | FROM_UNIXTIME() | FROM_UNIXTIME(1665305400) |
发表回复