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)=1
和w1.RecordDate - w2.RecordDate = 1
感谢您的帮助
答案 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