#mysql关于查询时间的语法
#获取当前日期和时间的函数。2020-05-08 16:42:36
select NOW();
#获取当前的日期 2020-05-08
select CURDATE();
#获取当前时间 16:42:23
SELECT CURTIME();
# 2020-05-08
SELECT DATE(now()) from now();
SELECT DATE(create_time) from 表名 limit 1;
#获取返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
select EXTRACT(YEAR_MONTH FROM now()) ;
SELECT EXTRACT(YEAR_MONTH from create_time) from 表名 limit 1;
#DATE_ADD将日期添加指定的时间间隔。 2020-05-09 16:57:24
select DATE_ADD(now(),INTERVAL 1 DAY) ;
#DATE_SUB 将日期减去指定的时间间隔。 2020-05-07 16:58:02
select DATE_SUB(now(),INTERVAL 1 DAY) ;
#DATEDIFF 获取两个日期之间的天数。(只有日期部分参与计算
SELECT DATEDIFF(NOW(),'2020-04-08')
#DATEFORMAT 格式化日期时间 2020-05-08
SELECT DATE_FORMAT(now(),'%Y-%m-%d')
#1,查询今天的绘本
select create_time from 表名 where TO_DAYS(NOW())=TO_DAYS(create_time);
select create_time from 表名 where DATE_FORMAT(CURDATE(),'%Y-%m-%d')=DATE_FORMAT(create_time,'%Y-%m-%d')
#2,昨天
select create_time from 表名 where TO_DAYS(NOW())-1=TO_DAYS(create_time);
#3,昨天以后的数据
select create_time from 表名 where TO_DAYS(NOW())-TO_DAYS(create_time)<=1;
#4,近7天
select create_time from 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_time);
#5,最近一个月
select create_time from 表名 where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(create_time);
#最近一个月,下午1点到2点的绘本出现top10次数
select * from 表名 where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(create_time) and DATE_FORMAT(create_time,'%H-%i-%s')>='12:00:00' and DATE_FORMAT(create_time,'%H-%i-%s')<='13:00:00' GROUP BY book_id ORDER BY count(book_id) desc ;
#近30天
select create_time from 表名 where DATE_SUB(CURDATE(),INTERVAL 30 DAY)<=DATE(create_time);
#本月
select create_time from 表名 where MONTH(create_time)=MONTH(CURDATE());
select create_time from 表名 where DATE_FORMAT(CURDATE(),'%m')=DATE_FORMAT(create_time,'%m')
#上一月
select create_time from 表名 where MONTH(create_time)=MONTH(CURDATE())-1;
select create_time from 表名 where DATE_FORMAT(CURDATE(), '%Y%m')-1=DATE_FORMAT(create_time,'%Y%m')
SELECT create_time FROM 表名 WHERE PERIOD_DIFF(DATE_FORMAT(CURDATE( ),'%Y%m' ),DATE_FORMAT(create_time,'%Y%m' )) =1;
#查询本季度数据
select create_time from 表名 where QUARTER(create_time)=QUARTER(CURDATE());
#查询上季度数据
select create_time from 表名 where QUARTER(create_time)=QUARTER(CURDATE())-1;
select create_time from 表名 where QUARTER(create_time)=QUARTER(date_sub(CURDATE(),INTERVAL 1 quarter));
#查询本年数据
select create_time from 表名 where YEAR(create_time)=YEAR(CURDATE());
#查询上年数据
select create_time from 表名 where YEAR(create_time)=YEAR(CURDATE())-1;
select create_time from 表名 where YEAR(create_time)=YEAR(date_sub(CURDATE(),INTERVAL 1 YEAR));
#查询当前这周的数据
select create_time from 表名 where WEEK(create_time)=WEEK(CURDATE());
#查询上周的数据
select create_time from 表名 where WEEK(create_time)=WEEK(CURDATE())-1;
select create_time from 表名 where WEEK(create_time)=WEEK(date_sub(CURDATE(),INTERVAL 1 WEEK));
%a:缩写星期名
%b:缩写月名
%c:月,数值
%D:带有英文前缀的月中的天
%d:月的天,数值(00-31)
%e:月的天,数值(0-31)
%f:微秒
%H:小时 (00-23)
%h:小时 (01-12)
%I:小时 (01-12)
%i:分钟,数值(00-59)
%j:年的天 (001-366)
%k:小时 (0-23)
%l:小时 (1-12)
%M:月名
%m:月,数值(00-12)
%p:AM 或 PM
%r:时间,12-小时(hh:mm:ss AM 或 PM)
%S:秒(00-59)
%s:秒(00-59)
%T:时间, 24-小时 (hh:mm:ss)
%U:周 (00-53) 星期日是一周的第一天
%u:周 (00-53) 星期一是一周的第一天
%V:周 (01-53) 星期日是一周的第一天,与 %X 使用
%v:周 (01-53) 星期一是一周的第一天,与 %x 使用
%W:星期名
%w:周的天 (0=星期日, 6=星期六)
%X:年,其中的星期日是周的第一天,4 位,与 %V 使用
%x:年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y:年,4 位
%y:年,2 位
时间间隔
MICROSECOND、
SECOND、MINUTE、
HOUR、DAY、WEEK、MONTH、
QUARTER、YEAR、SECOND_MICROSECOND、
MINUTE_MICROSECOND、MINUTE_SECOND、
HOUR_MICROSECOND、HOUR_SECOND、
HOUR_MINUTE、DAY_MICROSECOND、
DAY_SECOND、DAY_MINUTE、
DAY_HOUR、YEAR_MONTH