获取周一到今日(本周)以及上周一到上周日(上周)的数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a695929533/article/details/88927829

背景:做报表,需要使用sql(Mysql数据库)查出本周一到今日,以及上周一到上周日的数据。

问题:以周一为第一天,选择本周,获取从周一到周日的数据。选择上周,展示从上周一到上周天的的数据范围。

过程描述:从网上查技术博客,很多人都是直接粘贴的,实际上根本没考虑:如果当前为周天,那么获取的本周一其实是明天的日期。这个原因是因为mysql数据库默认实用的日期规范是西方的,我国每周的第一天是从周一开始的而西方是从周天开始的,所以,如果当前日期是周天,那么获取的本周周一,查出的结果是明天。

解决办法:使用YEARWEEK(date,model)方法,这个方法是输入一个日期,然后得出该日期在这一年的所在周,这个结果是可以直接进行比较的,比如本周的周三和周四进行比较,结果是相等的,所以可以用来查询数据。那么解决问题的办法,是依赖YEARWEEK变更计算模式,使用:

 YEARWEEK(DATE_FORMAT(create_date,'%Y-%m-%d'),1)

 意思是 输入 create_date,转换成年月日的格式,然后通过模式1(指定每周的周一为第一天),输出年份和当前日期所在的周数。

接下来,就简单了,进行比较:

 YEARWEEK(DATE_FORMAT(create_date,'%Y-%m-%d'),1) = YEARWEEK(NOW(),1)-1;

 这个查的是,数据所在年份周数 等于 当前日期(不需要获取周天的日期)所在的年份周数。

来一个完整的:

SELECT * FROM task  WHERE 
 YEARWEEK(DATE_FORMAT(create_date,'%Y-%m-%d'),1) = YEARWEEK(NOW(),1)-1;

 这样,就能把本周一到周日的数据全查出来了。

猜你喜欢

转载自blog.csdn.net/a695929533/article/details/88927829