在 MySQL 中,对两个时间进行加减操作常常涉及以下两种情况:

  1. 对时间进行加减(即一个时间点加上或减去时间间隔)
  2. 计算两个时间之间的差异(即两个时间点相差多少时间)

下面我们详细介绍这两种情况的实现方法。


一、时间加减操作

1. 使用 DATE_ADD() 函数进行加法操作

DATE_ADD() 用于在指定的日期或时间上加上一个时间间隔。

语法:

DATE_ADD(date, INTERVAL expr unit)

  • date:要操作的日期或时间。
  • expr:表示要加的时间间隔(一个整数)。
  • unit:时间单位(如:SECONDMINUTEHOURDAYMONTHYEAR 等)。

示例:

  • 加 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:时间单位(如:SECONDMINUTEHOURDAYMONTHYEAR 等)。

示例:

  • 减去 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:时间单位,指定结果的单位,常用的单位包括:SECONDMINUTEHOURDAYMONTHYEAR 等。
  • 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)