今天在leetcode中刷题刷到了一道题, 它就需要用到datadiff(), timestampdiff()两个方法, 在这里介绍一下这两个方法.
一: leetcode 197. 上升的温度
题目描述:
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| recordDate | date |
| temperature | int |
+---------------+---------+
id 是这个表的主键
该表包含特定日期的温度信息
要求;
编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id
。
返回结果 不要求顺序 。
示例 1:
输入:
Weather 表:
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+----+------------+-------------+
输出:
+----+
| id |
+----+
| 2 |
| 4 |
+----+
解释:
2015-01-02 的温度比前一天高(10 -> 25)
2015-01-04 的温度比前一天高(20 -> 30)
解法一:
select w1.id
from Weather w1 inner join weather w2
on datediff(w1.recordDate, w2.recordDate) = 1
where w1.temperature > w2.temperature;
解法二:
select w1.id
from Weather w1 inner join weather w2
on timestampdiff(day, w1.recordDate, w2.recordDate) = -1
where w1.temperature > w2.temperature;
二: datediff(), timestampdiff()讲解
2.1: datediff()
格式:
DATEDIFF( enddate[结束时间], startdate[开始时间] )
DATEDIFF函数,返回值是相差的天数,不能定位到小时、分钟和秒。
startdate 和 enddate 参数是合法的日期表达式.
举例1:
// 使用如下 SELECT 语句:
SELECT DATEDIFF('2018-03-22 09:00:00', '2018-03-20 07:00:00') DiffDate;
结果1:
举例2:
//使用如下 SELECT 语句:
SELECT DATEDIFF('2018-03-20 09:00:00', '2018-03-21 07:00:00') DiffDate;
结果2:
2.2: timestampdiff()
MySQL 数据库的 TIMESTAMPDIFF 函数 可以计算两个日期相差的秒数、分钟数、小时数、天数、周数、季度数、月数、年数,当前日期减少或者增加天数、周数等。
格式:
SELECT TIMESTAMPDIFF( type[类型],startdate[开始时间],enddate[结束时间] );
相差的秒数:
SELECT TIMESTAMPDIFF(SECOND,'1993-03-23 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
相差的分钟数:
SELECT TIMESTAMPDIFF(MINUTE,'1993-03-23 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
相差的小时数:
SELECT TIMESTAMPDIFF(HOUR,'1993-03-23 00:00:00 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
相差的天数:
SELECT TIMESTAMPDIFF(DAY,'1993-03-23 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
相差的周数:
SELECT TIMESTAMPDIFF(WEEK,'1993-03-23 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
相差的季度数:
SELECT TIMESTAMPDIFF(QUARTER,'1993-03-23 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
相差的月数:
SELECT TIMESTAMPDIFF(MONTH,'1993-03-23 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
相差的年数:
SELECT TIMESTAMPDIFF(YEAR,'1993-03-23 00:00:00',DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'));
获取当前日期:
// 带具体时间 如:2021-05-11 11:37:26
SELECT NOW();
// 不包括具体时间 如:2021-05-11
SELECT CURDATE();
当前日期增加一天:
SELECT DATE_SUB(CURDATE(),INTERVAL -1 DAY);
当前日期减少一天:
SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY);
当前日期增加一周:
SELECT DATE_SUB(CURDATE(),INTERVAL -1 WEEK);
当前日期增加一月:
// 获取到天 day:2021-05-11
SELECT DATE_SUB(CURDATE(),INTERVAL -1 MONTH);
// 获取到秒 s:2021-06-11 11:41:17
SELECT DATE_SUB(NOW(),INTERVAL -1 MONTH);
2.3: 常见日期单词
- FRAC_SECOND 毫秒
- SECOND 秒
- MINUTE 分钟
- HOUR 小时
- DAY 天
- WEEK 星期
- MONTH 月
- QUARTER 季度
- YEAR 年
参考文章: MYSQL 之 TIMESTAMPDIFF 与 DATEDIFF 函数_BrightChen666的博客-CSDN博客_timestampdiff