Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有MySQL函数可以获取开始日期或结束日期介于给定开始日期和结束日期之间的所有行?_Mysql - Fatal编程技术网

是否有MySQL函数可以获取开始日期或结束日期介于给定开始日期和结束日期之间的所有行?

是否有MySQL函数可以获取开始日期或结束日期介于给定开始日期和结束日期之间的所有行?,mysql,Mysql,我有一个事件表,其中记录的开始和结束时间作为MySQL DATETIME对象,格式为YYYY-MM-DD HH:MM:SS。我想查找特定日期范围内发生的所有事件。但是,事件可以跨越多天并超出我的日期范围,但如果它们与我的日期范围重叠1秒或更长时间,我希望返回它们 建议 SELECT * FROM table WHERE startdate >= 'starting date' AND startdate < 'ending date' OR enddate >= 'st

我有一个事件表,其中记录的开始和结束时间作为MySQL DATETIME对象,格式为YYYY-MM-DD HH:MM:SS。我想查找特定日期范围内发生的所有事件。但是,事件可以跨越多天并超出我的日期范围,但如果它们与我的日期范围重叠1秒或更长时间,我希望返回它们

建议

SELECT *
FROM table
WHERE startdate >= 'starting date' AND startdate < 'ending date'
    OR enddate >= 'starting date' AND enddate < 'ending date'

这将有助于避免日期相同,但您的时间在间隔内几小时、几分钟或几秒钟的错误。

这将发现所有完全包含在范围内的事件:

SELECT * FROM table WHERE start_date BETWEEN start_of_range AND end_of_range 
                      AND stop_date  BETWEEN start_of_range AND end_of_range
SELECT * FROM table WHERE start_date <= end_of_range 
                      AND stop_date  >= start_of_range
这将查找事件的任何部分与范围的任何部分重叠的任何事件:

SELECT * FROM table WHERE start_date BETWEEN start_of_range AND end_of_range 
                      AND stop_date  BETWEEN start_of_range AND end_of_range
SELECT * FROM table WHERE start_date <= end_of_range 
                      AND stop_date  >= start_of_range

基本上,你可以使用定期的比较——上面的比较应该有效——诀窍是检查所有可能发生的不同情况

结束日期在范围内的事件

B开始日期在范围内的事件

C开始日期和结束日期均在范围内的事件

D开始日期和结束日期都超出范围但重叠的事件


罗伯特的回答很好,但没有考虑到案例D,即事件在范围之前开始,在范围之后结束。

蜥蜴比尔和罗伯特·甘博的回答对于所问的问题是正确的,但我想知道你是否在问你认为自己是什么。。。如果要查找重叠事件,则需要考虑比搜索范围更长的事件

           Monday   Tuesday   Wednesday   Thursday

Search:                |-----------|

Shopping                       |-----|              Found OK
Eating              |--------|                      Found OK
Stack Overflow |---------------------------------|  Not found!
如果您想将其包括在内,请执行以下操作:


从表格中选择*开始日期<结束日期>开始日期

从表格中选择*,其中开始日期=开始范围的开始日期

很好地配合

D开始日期和结束日期都超出范围但重叠的事件


??

如果你涉及A或B,你不必担心C。你完全正确,我只是想说明一个事件可能重叠的所有可能方式。