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);

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2022-02-12 20:00  Marydon  阅读(1314)  评论(0编辑  收藏  举报