详解Mysql查询今日、昨天、本月、上个月、去年今天、最近几天的数据

数据库 log_web 表信息如下:

id ip time
1 0:0:0:0:0:0:0:1 2017-08-31 15:51:57
2 0:0:0:0:0:0:0:1 2017-08-31 15:52:51
3 0:0:0:0:0:0:0:1 2017-09-01 08:35:50
4 0:0:0:0:0:0:0:1 2017-09-01 08:36:51

1.获取今日数据

敲黑板:Mysql中的 now(),curdate()函数:获取当前日期

select now(),curdate();

运行SQL后得到的数据如下所示:

now() curdate()
2017-09-01 12:07:34 2017-09-01

->now()函数可以精确到 年月日时分秒,curdate()函数可以精确到 年月日

今日的网站访问量获取方式为

select count(*) from log_web where time >= CURDATE();
运行SQL:count(*)值 2


2.获取昨日数据

敲黑板:DATE(date) 函数:将参数转为日期输出,精确到年月日
DATE_SUB(date,INTERVAL expr type)函数:获取一个指定间隔的日期, 详见API

SELECT now(),DATE(now()), DATE_SUB(CURDATE(),INTERVAL 1 DAY);

运行SQL后得到的数据如下所示:

now() DATE(now()) DATE_SUB(CURDATE(),INTERVAL 1 DAY)
2017-09-01 12:07:34 2017-09-01 2017-08-31

->Date函数使值输出为YYYY-MM-DD格式的日期;
->date_sub函数,传递了{date=curdate(),expr=1,type=day}三个参数,{curdate()=2017-09-01};运行为:获取距离当前时间1天的日期;type的参数可以为多种,见API

昨日的网站访问量获取方式为

SELECT count(*) from log_web where date(time) = DATE_SUB(CURDATE(),INTERVAL 1 DAY);
运行SQL:count(*)值 2

同理可得,前天的网站访问量获取方式为

SELECT count(*) from log_web where date(time) = DATE_SUB(CURDATE(),INTERVAL 2 DAY);

去年今日的网站访问量获取方式为

SELECT count(*) from log_web where date(time) = DATE_SUB(CURDATE(),INTERVAL 1 YEAR);


3.获取近7天的访问量,不包含今天

SELECT count(*) from log_web where time > DATE_SUB(CURDATE(),INTERVAL 7 DAY) and time < DATE(now());

curdate()=2017-09-01;
DATE_SUB(CURDATE(),INTERVAL 7 DAY) =2017-08-25;
now()=2017-09-01 12:07:34 ;
DATE(now())=2017-09-01;
–>查询时间为最近7天的数据。 2017-09-01>time>2017_08_25
若没有and time < DATE(now()),则获取到的数据为最近7天,25、26、27、28、29、30 、31,以及当天09-01的数据值;time>2017_08_25

同理获取近30天的访问量,不包含今天

SELECT count(*) from log_web where time > DATE_SUB(CURDATE(),INTERVAL 30 DAY) and time < DATE(now());

同理可得,前几周,前几个月,前几小时,前几分钟的数据,参考API参数


4.获取本月数据

敲黑板:DATE_FORMAT(date, ‘%Y%m’ )函数

select DATE_FORMAT(now(), ‘%Y%m’ );

运行SQL后得到的数据如下所示:

now()
201709
->  得当当前月的月份
> **SELECT count(*) FROM log_web WHERE DATE_FORMAT(time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' );**

5.获取上个月数据

> **SELECT count(*)  FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( time, '%Y%m' ) ) =1**

敲黑板:PERIOD_DIFF()函数;
获取2个时间点之间的距离,如上距今1个月份,即上个月;用DATE_SUB()函数也可实现,type=MONTH即可


你可能感兴趣的:(MySql)