DATEDIFF() 返回两个日期之间的时间差
DATEDIFF(datepart,startdate,enddate) 返回enddate和startdate差值,可正可负,根据开始和结束的时间关系,其中,datepart是返回的类型,可以是天、周、月等。
startdate,enddate 是返回 datetime值或日期格式字符串的表达式。
使用
SELECT NOW(); -- 2022-05-17 15:26:18
SELECT CURDATE();-- 2022-05-17
SELECT CURTIME();-- 15:26:18
SELECT DATEDIFF(CURDATE(), '2022-5-16') ,DATEDIFF(NOW(), '2022-5-19') ; -- 1 -2
使用案例
编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。
- 方法一 使用JOIN联结
SELECT w1.id FROM Weather AS w1 JOIN Weather AS w2 ON DATEDIFF(w1.recordDate, w2.recordDate) = 1 AND w1.temperature > w2.temperature;
- 方法二 使用WHERE查询
SELECT w1.id FROM Weather AS w1, Weather AS w2 WHERE DATEDIFF(w1.recordDate, w2.recordDate) = 1 AND w1.temperature > w2.temperature;
- 方法三 使用子查询
三种比较
子查询效果比较差,是因为每次子查询都是全部查询。因此性能浪费较多