DATEDIFF和自己做减法有什么区别

  • 本文关键字:区别 自己做 DATEDIFF mysql sql
  • 更新时间 :
  • 英文 :


leetcode 问题 197.温度上升


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

+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
|       1 |       2015-01-01 |               10 |
|       2 |       2015-01-02 |               25 |
|       3 |       2015-01-03 |               20 |
|       4 |       2015-01-04 |               30 |
+---------+------------------+------------------+
For example, return the following Ids for the above Weather table:
+----+
| Id |
+----+
|  2 |
|  4 |
+----+

我不知道函数DATEDIFF(),所以我写了我的SQL解决方案:

select w1.Id
from Weather w1,Weather w2
where w1.RecordDate - w2.RecordDate = 1
and w1.Temperature > w2.Temperature

我通过了测试用例,但提交错误,正确的解决方案是使用功能DATEDIFF()

select w1.Id
from Weather w1,Weather w2
where DATEDIFF(w1.RecordDate,w2.RecordDate)=1
and w1.Temperature > w2.Temperature

所以我的问题是两者之间有什么区别 DATEDIFF(w1.RecordDate,w2.RecordDate)=1w1.RecordDate - w2.RecordDate = 1

谢谢你的帮助

如果RecordDate的数据类型是DATETIME而不是DATE,则减去它们将返回一个大值,其中包含时间和日期之间的差异。 例如

mysql> select cast('2019-03-21 10:20:30' as datetime) - cast('2019-03-11 9:15:20' as datetime) as difference;
+-----------------+
| difference      |
+-----------------+
| 10010510.000000 |
+-----------------+

但如果它们是DATE那么减法应该与DATEDIFF()相同:

mysql> select cast('2019-03-21' as date) - cast('2019-03-11' as date) as difference;
+------------+
| difference |
+------------+
|         10 |
+------------+

当我们对日期或日期时间进行简单的加法和减法时,它会将其转换为数字,然后执行实际操作。操作执行后,输出将不是日期数据类型。

例如

<小时 />

对于加法 (+( : -

'2020-07-31' + 1 => 20200732

<小时 />

对于减法 (-( : -

'2020-08-01' - '2020-07-31' => 70

<小时 />它应该返回 1,

但由于他们认为它是一个数字,所以他们返回 70 而不是 1。

这就是我们不能在日期上直接加法或减法的原因。

要获得两个日期之间的实际差异,必须使用 DateDiff((。

Datediff(cast('2020-08-01' as Date),Cast('2020-07-31' as Date)) => 1
<小时 />

最新更新