select now() -- 当前的日期时间
select TO_DAYS(now()) -- 返回从0年开始到当前时间的总天数
select date(now()) -- 返回当前日期
等价于 select curdate();
今天
select * from 表名 where to_days(时间字段名) = to_days(now());
select * from 表名 where date(时间字段名)=date(now());
select * from 表名 where 时间字段名 >今天的日期 and 时间字段名<明天的日期
昨天
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1
select * from 表名 where date(时间字段名)='昨天日期';
select * from 表名 where 时间字段名 >昨的日期 and 时间字段名<今天的日期
近7天
SELECT * FROM 表名 where date(时间字段名) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
-- date_add和date_sub返回的是一个日期,这里返回的是7天前的那个日期,然后我们用date(时间字段名)相比就可以得到一个区间
近30天
SELECT * FROM 表名 where date(时间字段名)>=DATE_SUB(CURDATE(), INTERVAL 30 DAY)
本月
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
SELECT * FROM `表名` where date_format(时间字段名,'%Y-%m')=date_format(now(),'%Y-%m')
SELECT *FROM 表 WHERE PERIOD_DIFF(DATE_FORMAT(CURDATE(),'%Y%m),DATE_FORMAT(时间字段名,'%Y%m'))=0
上一月
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1
查询本季度数据
select * from `表名` where QUARTER(时间字段名)=QUARTER(now());
查询上季度数据
select * from `表名` where QUARTER(时间字段名)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
查询本年数据
select * from `表名` where YEAR(时间字段名)=YEAR(NOW());
查询上年数据
select * from `表名` where year(时间字段名)=year(date_sub(now(),interval 1 year));
查询当前这周的数据
SELECT * FROM `表名`WHERE YEARWEEK(date_format(时间字段名,'%Y-%m-%d')) = YEARWEEK(now());
查询这周周一的数据
select date_sub('2019-08-22',INTERVAL weekday('2019-08-22') day)
查询上周的数据
SELECT * FROM `表名` WHERE YEARWEEK(date_format(时间字段名,'%Y-%m-%d')) = YEARWEEK(now())-1;
查询距离当前现在6个月的数据
SELECT * FROM `表名` where 时间字段名 between date_sub(now(),interval 6 month) and now();
获取下个月数据
SELECT *FROM 表 WHERE PERIOD_DIFF(DATE_FORMAT(CURDATE(),'%Y%m),DATE_FORMAT(字段名,'%Y%m'))=-1 -- 以年月为维度
例如当前时间为2018-07-02 则取数据范围为2018-08-01至2018-08-31
SELECT *FROM 表 WHERE PERIOD_DIFF(DATE_FORMAT(CURDATE(),'%m),DATE_FORMAT(字段名,'%m'))=-1 -- 以月为维度
例如当前时间为2018-07-02 则取数据范围为所有数据中满足字段名中月份为08-01至08-31的数据(可用于筛选下个月生日人员)
补充1
日期转数字
select date('2019-01-01' )-0
--->20190101
select CONVERT(date('2019-01-01'),unsigned)
--->20190101
date_add,date_sub 可以将数字转换为日期
date(created) between date_add(curdate()-day(curdate())+24,interval -1 month) and date_add(curdate()-day(curdate())+23,interval 0 month) 上月 24 到本月23
一周内
yearweek(date(created)=yearweek(now())-1
yearweek(date_format(created,'%Y-%m-%d'))=yearweek(now())-1
yearweek 支持时间类型
select yearweek('2019-07-24 23:34:34')
--->201929
截止到目前大于18岁
TIMESTAMPDIFF(YEAR,`birthdate`, date(created) > 18
TIMESTAMPDIFF(YEAR,`birthdate`, date(created) > 18
SELECT t.`user_id`,
@age:= TIMESTAMPDIFF(YEAR,t.`birthdate`,date_format(t.created,'%Y-%m-%d')),
CASE
WHEN @age >0
AND @age <=18 THEN '0~18'
WHEN @age >18
AND @age <=25 THEN '18~25'
WHEN @age >25
AND @age <=30 THEN '25~30'
WHEN @age >30
AND @age <=35 THEN '30~35'
WHEN @age >35
AND @age <=40 THEN '35~40'
WHEN @age >40
AND @age <=45 THEN '40~45'
WHEN @age >45
AND @age <=50 THEN '45~50'
WHEN @age >50
AND @age <=55 THEN '50~55'
WHEN @age >55
AND @age <=60 THEN '55~60'
ELSE '60以上'
END AS age_range
FROM tb_name t ,
(SELECT @age:= 0) p
WHERE t.`birthdate` <> ''
参考链接:
https://blog.csdn.net/xu137324/article/details/80883117
https://uule.iteye.com/blog/2159811
扫码关注更多的分享内容,祝好呀~~