gpt4 book ai didi

mysql - 如何测试某个时间段是否与某个时间段有重叠?

转载 作者:行者123 更新时间:2023-11-29 11:39:14 24 4
gpt4 key购买 nike

在我的表格中有两列日期类型和两列时间类型:

enter image description here

以下是该表的一些记录:

enter image description here

现在,在我的网络应用程序中,我想在该表中插入一个新行:

enter image description here

提交表单时,我想计算输入的句点与数据库表中已有的其他句点重叠的行数;我所说的周期是指(开始日期,开始时间)和(结束日期,结束时间)在一起,例如(2016-03-15,12:00:00)和(2016-03-17,10:00:00)。

我尝试了这个查询,但它没有给出正确的结果:

select count(identifiant) from reservation_table where ( (date_debut <= '2016-03-14' and heure_debut <= '01:00:00') and (date_fin <= '2016-03-14' and heure_fin <= '03:00:00') and (date_fin > '2016-03-14' and heure_fin > '01:00:00') ) or 
( (date_debut >= '2016-03-14' and heure_debut >= '01:00:00') and (date_fin >= '2016-03-14' and heure_fin >= '03:00:00') and (date_debut < '2016-03-14' and heure_debut < '03:00:00') ) or
( (date_debut >= '2016-03-14' and heure_debut >= '01:00:00') and (date_fin <= '2016-03-14' and heure_fin <= '03:00:00') ) or
( (date_debut <= '2016-03-14' and heure_debut <= '01:00:00') and (date_fin >= '2016-03-14' and heure_fin >= '03:00:00') );

为了更好地理解周期重叠,这里有一张图片:

enter image description here

因此,在此图像中,红色周期是从网络应用程序输入的周期,黑色周期是数据库中已有的周期。那么如何获取与特定时期重叠的所有时期呢?

最佳答案

测试两个元素是否重叠的方法是检查一个元素是否在第二个元素结束之前开始,而第二个元素是否在第一个元素结束之前开始,如 中所述。标签wiki.
我对 MySql 没有太多经验,但确实找到了 this methoddatetime创建datetime值:

STR_TO_DATE(CONCAT(date, ' ', time), '%Y-%m-%d %H:%i:%s')

获得日期时间值后,您可以执行以下操作:

select count(identifiant) 
from reservation_table
where @YourStartDatetime <= STR_TO_DATE(CONCAT(date_fin,' ', heure_fin), '%Y-%m-%d %H:%i:%s')
and @YourEndDateTime >= STR_TO_DATE(CONCAT(date_debut ,' ', heure_debut), '%Y-%m-%d %H:%i:%s')

如果计数返回 0,则表示您没有与 @YourStartDatetime@YourEndDateTime 指定的时间段重叠的记录

关于mysql - 如何测试某个时间段是否与某个时间段有重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36089735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com