系统运维系列 之MySQL部分学习整理5

Posted 琅晓琳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统运维系列 之MySQL部分学习整理5相关的知识,希望对你有一定的参考价值。

1 应用场景
mysql数据库中查找数据,要求是数据为日期不连续数据,输入一个日期查询日期所在周指定周几的数据和上几周对应时间段数据(一个月内)。关于此问题网上资料未曾有明确的解决方案,本篇博客整理相关解决流程。

2 解决方案

2.1 数据库查询全量数据,在业务层做相关筛选(这里不在赘述相关方法)。
2.2 数据库中直接按照要求查询相关数据。
step1 按照要求取指定周几的日期
--+0代表取输入日期当周的周一,-1代表周二...-6代表周日,依次类推
--含义为取0520这一天所在周的周一对应的日期 即2022-05-16
select date_sub('2022-05-20',INTERVAL WEEKDAY('2022-05-20') + 0 DAY) as date1;
step2 得到对应周几的日期,依次取出相隔7天的日期,连续取3次,即可大约对应4周数据
select date_sub(date1,INTERVAL + 07 DAY) as date2;
select date_sub(date1,INTERVAL + 14 DAY) as date3;
select date_sub(date1,INTERVAL + 21 DAY) as date4;
step3 按照所取日期进行数据筛选
select * from table where date in(date1,date2,date3,date4);

--相关函数解读
--函数从日期减去指定的时间间隔 注意减去2天是+2;加上2天是-2
--date_sub(date,interval 2 day)
date_sub(date,interval expr type)
select * from table where date > date_sub(date,interval 2 day) and date <= date;

--返回date的星期索引(0=星期一,1=星期二,…… 6=星期天)
--WEEKDAY(date)
WEEKDAY('2022-05-20') ---> 4
--返回date的星期索引(1=星期天,2=星期一,…… 7=星期六)
--DAYOFWEEK(date)
DAYOFWEEK('2022-05-20') ---> 6

--WEEKDAY(date)注意与excel的区别
--excel的用法
返回对应于某个日期的一周中的第几天。 默认情况下,天数是 1(星期日)到 7(星期六)范围内的整数
WEEKDAY(serial_number,[return_type])
Serial_number  必需。一个序列号,应使用DATE 函数输入日期
return_type    可选。用于确定返回值类型的数字
	1  或省略 数字 1(星期日)到 7(星期六)
	2  数字 1(星期一)到 7(星期日)
	3  数字 0(星期一)到 6(星期日)
	11 数字 1(星期一)到 7(星期日)

--常用的几个函数介绍
--获取本周一
--%w 是以数字的形式来表示周中的天数(0=星期天,1=星期一,…… 6=星期六)
SELECT DATE_sub(curdate(),INTERVAL date_format(curdate(),'%w')-1 day)
--获取本周日
SELECT DATE_sub(curdate(),INTERVAL date_format(curdate(),'%w')-7 day)
--获取上周一 -1+7
SELECT DATE_sub(curdate(),INTERVAL date_format(curdate(),'%w')+6 day)
--获取上周日 -7+7
SELECT DATE_sub(curdate(),INTERVAL date_format(curdate(),'%w') day)

以上是关于系统运维系列 之MySQL部分学习整理5的主要内容,如果未能解决你的问题,请参考以下文章

系统运维系列 之MySQL部分学习整理2

系统运维系列 之MySQL部分学习整理1

系统运维系列 之MySQL部分学习整理4

系统运维系列 之MySQL部分学习整理3

系统运维系列 之Clickhouse数据类型整理

系统运维系列 之Clickhouse数据类型整理