mysql 求日期差值,计算上线天数或注册天数
本来计算上线天数或注册天数是可以放到查询返回结果中处理的,但业务逻辑需要筛选上线天数达到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。