先来说下DATEDIFF函数,这个函数主要就是用来返回两个日期之间的天数。
mysql> SELECT DATEDIFF('2021-08-12','2021-08-13');
+-------------------------------------+
| DATEDIFF('2021-08-12','2021-08-13') |
+-------------------------------------+
| -1 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql>
这里注意可以注意到DATEDIFF函数是前面的参数减去后面的参数。
而TIMESTAMPDIFF函数对于时间的处理这块则比DATEDIFF使用的多,因为它的时间间隔支持很多类型.
如下所示:
TIMESTAMPDIFF(interval,datetime1,datetime2)
其中的interval可以支持一下类型:
- FRAC_SECOND。表示间隔是毫秒(注意mysql中低版本目前不支持此函数,可以手动使用SECONDS参数然后将结果*1000)
- SECOND 秒
- MINUTE 分钟
- HOUR 小时
- DAY 天
- WEEK 星期
- MONTH 月
- QUARTER 季度
- YEAR 年
与DATEDIFF函数有所不同TIMESTAMPDIFF是后面的参数减去前面的参数。
来看一道leetcode上使用DATEDIFF函数应用的题
题目中提取关键信息可以发现有2个条件
1.后一天的日期与前一天比
2.后一天的温度比前一天要高
select b.id
from Weather as a,Weather as b
where b.Temperature > a.Temperature
and DATEDIFF(b.recordDate ,a.recordDate ) = 1 ;
这里如果不使用日期函数的话可能有些麻烦,当然用窗口函数也可以解决.
select
Id
from
(
select Id,RecordDate,Temperature,
lag(RecordDate,1,9999-99-99) over (order by RecordDate) yd,
lag(Temperature,1,999) over(order by RecordDate ) yt
from Weather
)tmp
where Temperature >yt
and datediff(RecordDate,yd)=1
关于LAG函数可以参考https://www.begtut.com/mysql/mysql-lag-function.html