DATEDIFF和我自己进行减法有什么区别

时间:2019-04-16 02:45:40

标签: mysql sql

leetcode问题197.Rising Temperature


给出一个“天气”表,编写一个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

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

如果$(document).on('click','.button',function(){ $(this).prop('disabled',true); //coding.... $(this).prop('disabled',false); }); 的数据类型是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()

答案 1 :(得分:1)

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

例如,


附加(+):-

'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