表 Weather
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| recordDate | date |
| temperature | int |
+---------------+---------+
id 是这个表的主键
该表包含特定日期的温度信息
编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。
返回结果 不要求顺序 。
查询结果格式如下例:
Weather
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+----+------------+-------------+
Result table:
+----+
| id |
+----+
| 2 |
| 4 |
+----+
2015-01-02 的温度比前一天高(10 -> 25)
2015-01-04 的温度比前一天高(20 -> 30)
所以查询的条件有两个:
与之前的日期相差为 1
比之前的温度高
1.认识一下 DATEDIFF 函数,可以计算两者的日期差
DATEDIFF('2007-12-31','2007-12-30'); # 1
DATEDIFF('2010-12-30','2010-12-31'); # -1
SELECT b.Id
FROM Weather as a,Weather as b
WHERE a.Temperature < b.Temperature and DATEDIFF(a.RecordDate,b.RecordDate) = -1;#前面-后面
2.认识一下 DATE_ADD(Date,INTERVAL 1 day)函数,可以计算两者的日期和
day year month hour minute都可以
select w2.id from weather as w1,weather as w2
where DATE_ADD(w1.recordDate,INTERVAL 1 day)=w2.recordDate
and w1.Temperature<w2.Temperature
MySQL 日期函数
一.使用字符串函数截取年月

二,使用日期函数
1.返回当前的日期和时间 当前日期 当前时间
select now(),CURDATE(),CURTIME()

2.获取日期
select DATE('2012-09-09 10:00:45')

3.计算相差的天数 前者-后者
select DATEDIFF('2019-10-10','2019-10-21')

4.计算日期相加的年数

计算日期相加的天数

计算日期相加的月数

5.返回年

6.返回星期几

| 函数名 | 描述 | 实例 |
|---|---|---|
| ADDDATE(d,n) | 计算起始日期 d 加上 n 天的日期 |
|
| ADDTIME(t,n) | n 是一个时间表达式,时间 t 加上时间表达式 n |
加 5 秒:
添加 2 小时, 10 分钟, 5 秒:
|
| CURDATE() | 返回当前日期 |
|
| CURRENT_DATE() | 返回当前日期 |
|
| CURRENT_TIME | 返回当前时间 |
|
| CURRENT_TIMESTAMP() | 返回当前日期和时间 |
|
| CURTIME() | 返回当前时间 |
|
| DATE() | 从日期或日期时间表达式中提取日期值 |
|
| DATEDIFF(d1,d2) | 计算日期 d1->d2 之间相隔的天数 |
|
| DATE_ADD(d,INTERVAL expr type) | 计算起始日期 d 加上一个时间段后的日期 |
|
| DATE_FORMAT(d,f) | 按表达式 f的要求显示日期 d |
|
| DATE_SUB(date,INTERVAL expr type) | 函数从日期减去指定的时间间隔。 |
Orders 表中 OrderDate 字段减去 2 天:
|
| DAY(d) | 返回日期值 d 的日期部分 |
|
| DAYNAME(d) | 返回日期 d 是星期几,如 Monday,Tuesday |
|
| DAYOFMONTH(d) | 计算日期 d 是本月的第几天 |
|
| DAYOFWEEK(d) | 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 |
|
| DAYOFYEAR(d) | 计算日期 d 是本年的第几天 |
|
| EXTRACT(type FROM d) | 从日期 d 中获取指定的值,type 指定返回的值。 type可取值为:
|
|
| FROM_DAYS(n) | 计算从 0000 年 1 月 1 日开始 n 天后的日期 |
|
| HOUR(t) | 返回 t 中的小时值 |
|
| LAST_DAY(d) | 返回给给定日期的那一月份的最后一天 |
|
| LOCALTIME() | 返回当前日期和时间 |
|
| LOCALTIMESTAMP() | 返回当前日期和时间 |
|
| MAKEDATE(year, day-of-year) | 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期 |
|
| MAKETIME(hour, minute, second) | 组合时间,参数分别为小时、分钟、秒 |
|
| MICROSECOND(date) | 返回日期参数所对应的微秒数 |
|
| MINUTE(t) | 返回 t 中的分钟值 |
|
| MONTHNAME(d) | 返回日期当中的月份名称,如 November |
|
| MONTH(d) | 返回日期d中的月份值,1 到 12 |
|
| NOW() | 返回当前日期和时间 |
|
| PERIOD_ADD(period, number) | 为 年-月 组合日期添加一个时段 |
|
| PERIOD_DIFF(period1, period2) | 返回两个时段之间的月份差值 |
|
| QUARTER(d) | 返回日期d是第几季节,返回 1 到 4 |
|
| SECOND(t) | 返回 t 中的秒钟值 |
|
| SEC_TO_TIME(s) | 将以秒为单位的时间 s 转换为时分秒的格式 |
|
| STR_TO_DATE(string, format_mask) | 将字符串转变为日期 |
|
| SUBDATE(d,n) | 日期 d 减去 n 天后的日期 |
|
| SUBTIME(t,n) | 时间 t 减去 n 秒的时间 |
|
| SYSDATE() | 返回当前日期和时间 |
|
| TIME(expression) | 提取传入表达式的时间部分 |
|
| TIME_FORMAT(t,f) | 按表达式 f 的要求显示时间 t |
|
| TIME_TO_SEC(t) | 将时间 t 转换为秒 |
|
| TIMEDIFF(time1, time2) | 计算时间差值 |
|
| TIMESTAMP(expression, interval) | 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 |
|
| TO_DAYS(d) | 计算日期 d 距离 0000 年 1 月 1 日的天数 |
|
| WEEK(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 |
|
| WEEKDAY(d) | 日期 d 是星期几,0 表示星期一,1 表示星期二 |
|
| WEEKOFYEAR(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 |
|
| YEAR(d) | 返回年份 |
|
| YEARWEEK(date, mode) | 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 |
|
SQL查询温差
本文介绍如何使用SQL查询找出与前一天相比温度升高的日期。通过DATEDIFF和DATE_ADD函数的应用,实现对日期和温度数据的有效对比。
1079

被折叠的 条评论
为什么被折叠?



