表 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表示周一,以此类推 | |