mysql 日期类型计算 20251421编辑
Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注
资深码农+深耕理财=财富自由
欢迎关注

mysql 日期类型计算
Created by Marydon on 2022-02-12 20:00
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?