mysql 日期类型计算
1.情景展示
在进行按日期统计数据的时候,我们经常需要对日期的开始时间和结束时间有要求;
在mysql中,日期字段如何进行时间的计算呢?
2.to_days()
to_days(日期)函数:返回从0000年(公元1年)至指定日期的总天数(只计算日期不计算时间)。
to_days(nows()):将当前日期转换成距离0年的天数;
我们也可以用它来表示:今天
to_days(日期):只计算日期不计算时间,举例证明:
我们可以看到:
不管是23:59:59还是00:00:00,2022年2月11日转换成天数后,都是738562天。
2.1查询今天的数据
select * from 表名 where to_days(时间字段名) = to_days(now());
2.2查询昨天的数据
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) – TO_DAYS( 时间字段名) <= 1
2.3查询近7天的数据
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)
2.4查询近30天的数据
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)
2.5查询本月的数据
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' )
或
select * from 表名 where date_format(字段名,'%Y-%m')=date_format(now(),'%Y-%m')
2.6查询上一月的数据
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now() , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) = 1
或
select * from 表名 where date_format(字段名,'%Y-%m') = date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')
2.7查询本季度的数据
select * from 表名 where QUARTER(时间字段) = QUARTER(now());
2.8查询上一季度的数据
select * from 表名 where QUARTER(时间字段)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
2.9查询本年的数据
select * from 表名 where YEAR(时间字段)=YEAR(NOW());
3.0查询上一年的数据
select * from 表名 where year(字段名) = year(date_sub(now(),interval 1 year));
3.1查询本周的数据
SELECT * FROM 表名 WHERE YEARWEEK(date_format(字段名,'%Y-%m-%d')) = YEARWEEK(now());
3.2查询上一周的数据
SELECT * FROM 表名 WHERE YEARWEEK(date_format(字段名,'%Y-%m-%d')) = YEARWEEK(now()) - 1;
3.3查询近6月的数据
select * from 表名 where 字段名 between date_sub(now(),interval 6 month) and now();
3.date_sub()
DATE_SUB(date,INTERVAL expr unit)
date:日期类型;
expr:间隔数字(整数:正整数,时间会往前推;负整数,会往后推);
unit:间隔单位。
select SYSDATE(), DATE_SUB(SYSDATE(),INTERVAL 1 minute)
union
select SYSDATE(), DATE_SUB(SYSDATE(),INTERVAL -1 minute)
有了这个函数,我们就可以取任何时间区间的日期啦(并且语法和Oracle类似)。
4.DATE_ADD()
2022年2月26日19:39:20
DATE_ADD(date,INTERVAL expr unit)
date:日期类型;
expr:间隔数字(整数:正整数,时间会往前推;负整数,会往后推);
unit:间隔单位。
用法和DATE_SUB()一模一样。
如:获取本月1号
SELECT DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE()) + 1 DAY);
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/15886015.html