应用场景
MySQL使用日期作为条件查询或统计数据。
1.查询今天数据
select * from 表名 where to_days(时间字段名) = to_days(now());
to_days函数:返回从0000年(公元1年)至当前日期的总天数。
2.查询昨天数据
select * from 表名 where to_days(now()) - to_days(时间字段名) <= 1;
3.查询近7天的数据
select * from 表名 where date(时间字段名) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);
DATE() 函数返回日期或日期/时间表达式的日期部分。
2008-12-29 16:25:46.635 -> 2008-12-29
CURDATE() 函数返回当前的日期。
DATE_SUB() 函数从给定日期减去指定的时间间隔。
DATE_SUB(date,INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。type 参数DAY,HOUR,MINUTE等。
4.查询近30天的数据
select * from 表名 where date(时间字段名)>=DATE_SUB(CURDATE(), INTERVAL 30 DAY);
5.查询本月数据
select * from 表名 where DATE_FORMAT(时间字段名, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m');
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。
6.查询上月数据
select * from 表名 where PERIOD_DIFF(DATE_FORMAT(now() , '%Y%m'), DATE_FORMAT(时间字段名, '%Y%m')) = 1;
PERIOD_DIFF() 函数返回两个周期之间的差值。
7.查询本季度数据
select * from 表名 where QUARTER(时间字段) = QUARTER(now()) AND YEAR(时间字段) = YEAR(now());
QUARTER() 函数返回给定日期值(从 1 到 4 的数字)的一年中的季度。
YEAR()
函数接受date
参数,并返回日期的年份。
8.查询上季度数据
select * from 表名 where QUARTER(时间字段) = QUARTER(DATE_SUB(now(),interval 1 QUARTER))AND YEAR(时间字段) = YEAR(now());
9.查询本年数据
select * from 表名 where YEAR(时间字段) = YEAR(now());
10.查询上年数据
select * from 表名 where YEAR(时间字段) = YEAR(DATE_SUB(now(), INTERVAL 1 year));
11.查询本周数据
select * from 表名 where YEARWEEK(date_format(时间字段,'%Y-%m-%d')) = YEARWEEK(now());
YEARWEEK() 函数返回给定日期的年和周数(从 0 到 53 的数字)。
YEARWEEK(date, firstdayofweek)
这里有firstdayofweek,可选。 指定一周从哪一天开始。中国习惯:1 - 一周的第一天是星期一,第一周超过 3 天
12.查询上周数据
select * from 表名 where YEARWEEK(date_format(时间字段,'%Y-%m-%d')) = YEARWEEK(now())-1;
13.查询一段时间的数据
SELECT * FROM 表名 WHERE 时间字段 BETWEEN 一段时间的开始 AND 一段时间的结束;
SELECT * FROM 表名 WHERE date_format(时间字段,'%Y-%m-%d') BETWEEN date_format(一段时间的开始,'%Y-%m-%d') AND date_format(一段时间的结束,'%Y-%m-%d');
使用
BETWEEN AND
查到的时间段数据是不包含后面的边界的。可以使用DATE_SUB
加一天减一秒的方式扩大后边界,或者使用TO_DAYS
转换为天数。
总结:MySQL Date内置日期和时间函数
1.W3School
当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。
只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了。
在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数。
2.mysql中文文档
MySQL 8.0 参考手册-12.7 日期和时间函数_MySQL 8.0 参考手册