【关于MySQL8日期区间范围判断】
1.场景1:根据起止日期来判断表内某日期字段是否在此区间内,并获取符合条件的数据:
mapper内查询方法中传入两个字段:起,止日期(string且yyyy-MM-dd HH:MM:SS)作为查询参数,而creation_date是datetime类型字段(datetime是具体到秒的):
此处入参已经用具体数据代替显示:2023-05-29 00:00:00和2023-05-29 23:59:59
select 1 from test_apply apply
where
date_format (apply.creation_date,
'%Y-%m-%d %H:%i:%s') between '2023-05-29
00:00:00' and '2023-05-29 23:59:59'
2.场景2:根据当天时间(年月日)查询位于表内起止日期字段范围内的数据
我们只传入一个yyyy-MM-dd的字符串作为查询参数,然后匹配表里的startDate和endDate两个日期字段,这两个均为具体到秒的datetime类型,然后可以查询到位于此期间的数据,且包含区间边界值比如0点和23:59:59:
此处入参已经用具体数据代替显示:2023-04-20
select
id,resource_num,start_date_time,end_date_time
from scheduled_down_plan
where'2023-04-20' between date_format (start_date_time
, '%Y-%m-%d') and date_format (end_date_time
, '%Y-%m-%d')
3.场景3 近七天查询(周查询)
sql实现周查询的两种方式,当需要展示最近七天时建议使用第一种方法,严格按周查询则用第二种,注意:这两种查询的时间范围通常是不一样的
-- 方法一:查询最近七天数据, 即从今天至今天往前倒退七天
-- DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= creation_date
select xxx from
scheduled_down_plan
where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= creation_date
-- 方法二:查询本周符合条件的数据,需要看数据库配置定义是周几为周首天,如果是周一开始那就是周一至今天,所以很可能查询结果的数据范围是不足七天的
-- YEARWEEK(date_format(esm.creation_date, '%Y-%m-%d')) = YEARWEEK(NOW())
select xxx from
scheduled_down_plan
where
YEARWEEK(date_format(creation_date, '%Y-%m-%d')) = YEARWEEK(NOW())