本来计算上线天数或注册天数是可以放到查询返回结果中处理的,但业务逻辑需要筛选上线天数达到7天、30天的记录,也就是说日期差值需要用在 where 子句中。这时需要 mysql 的库函数来帮忙处理了。

涉及到处理时间差值的 mysql 库函数有这几个:TIMEDIFF()DATEDIFF()TIMESTAMPDIFF()

1. 使用 TIMEDIFF() 函数,求 time 差值

timediff(time1, time2) 两个日期相减 time1 - time2,返回 time 差值

mysql> SELECT TIMEDIFF('2021-09-18 12:30:10','2021-09-10 10:00:05') diff;
+-----------+
| diff      |
+-----------+
| 194:30:05 |
+-----------+
1 row in set (0.00 sec)

不满足返回天数的需求

2. 使用 DATEDIFF() 函数,求 date 差值

datediff(date1, date2) 两个日期相减 date1 - date2,返回天数

mysql> SELECT DATEDIFF('2021-09-18 12:30:10','2021-09-10 10:00:05') diff;
+------+
| diff |
+------+
|    8 |
+------+
1 row in set (0.00 sec)

满足返回天数的需求

使用 TIMESTAMPDIFF() 函数

TIMESTAMPDIFF(interval, datetime_expr1, datetime_expr2) datetime_expr2 - datetime_expr1,返回的时间

interval:比较的类型,可取值 FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER 或 YEAR

mysql> SELECT TIMESTAMPDIFF(DAY,'2021-09-18 12:30:10','2021-09-10 10:00:05') diff;
+------+
| diff |
+------+
|   -8 |
+------+
1 row in set (0.00 sec)

使用 DAY 类型满足返回天数的需求,需要注意的是,TIMESTAMPDIFF() 函数,是用参数3减参数2。

参考:mysql - 求两个时间的差值

文章目录