MySQL 日期函数之 DATEDIFF

前言

 

刷题过程中,发现有关日期的加减尤其频繁,频繁程度仅次于之前的工资谁高的问题。不得不细细的想,为啥呢?是爱么?是希望么?当然不是啊,是效率。最终的最终,要归结为效率,毕竟终极目标都是为了赚小钱钱!

 

DATEDIFF 函数简介

 

DATEDIFF() 函数返回两个日期之间的天数,通俗的讲就是计算时间差。

DATEDIFF() 函数语法格式为:

DATEDIFF(date1,date2)

得到的结果就是 date1 与 date2 相差的天数,如果 date1 比 date2 大,则结果为正,反之则为负。

注意:只有日期值部分参与计算!!!

 

DATEDIFF 函数实例

 

给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。

+---------+------------------+------------------+| Id(INT) | RecordDate(DATE) | Temperature(INT) |+---------+------------------+------------------+|       1 |       2015-01-01 |               15 ||       2 |       2015-01-02 |               26 ||       3 |       2015-01-03 |               21 ||       4 |       2015-01-04 |               34 |+---------+------------------+------------------+#例如,根据上述给定的 Weather 表格,返回如下 Id:+----+| Id |+----+|  2 ||  4 |+----+​​​​​​
SELECT B.IdFROM Weather AS ACROSS JOIN Weather AS B ON DATEDIFF(A.RecordDate,B.RecordDate)=-1WHERE A.Temperature < B.Temperature;

 

逻辑解析

 

  • 中心思想:交叉联结

  • 首先,将一个表命名 A 和 B ,变成两个表

  • 其次,找到 A 表中日期比 B 表中日期小一天的数据

  • 再次,找到满足上述条件时,A 表的温度比 B 表的温度小的数据

  • 最后,再组合一下子就好了嘛

 

其他解题方法​​​​​​​

SELECT B.IdFROM Weather AS ACROSS JOIN Weather AS B ON TIMESTAMPDIFF(DAY,A.RecordDate,B.RecordDate)=1WHERE A.Temperature < B.Temperature;

 

 

注意:TIMESTAMPDIFF() 的规则同 DATEDIFF() 的规则不同~且更加温婉细腻!

你可能感兴趣的:(MySQL,日期函数,DATEDIFF)