【关于mysql日期区间范围判断】

发布时间 2023-07-05 16:48:44作者: 哒布溜

mysql version:8.0

1.场景1:根据起止日期来判断表内某日期字段是否在此区间内,并获取符合条件的数据:

mapper内查询方法中传入两个字段:起,止日期(string且yyyy-MM-dd HH:MM:SS)作为查询参数,而creation_date是具体到秒的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())