Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 用于检查两个事件是否重叠的sql查询_Mysql_Sql_Date_Overlap - Fatal编程技术网

Mysql 用于检查两个事件是否重叠的sql查询

Mysql 用于检查两个事件是否重叠的sql查询,mysql,sql,date,overlap,Mysql,Sql,Date,Overlap,我的表有3列名称、开始日期和结束日期 仅当新事件的日期不与现有事件重叠时,我才需要在表中插入记录。 假设我有一个活动,开始日期为2015年1月1日,结束日期为2015年12月31日 如果有以下日期,我无法插入事件: 2014年12月31日至2016年1月1日 2015年2月1日至2015年12月30日 2014年12月31日至2015年6月1日 2015年2月1日至2016年1月1日 或者,谈论整数: 范围为2…6的现有记录 可能的无效记录: 1..3 3..5 5..7 1..7

我的表有3列名称、开始日期和结束日期 仅当新事件的日期不与现有事件重叠时,我才需要在表中插入记录。 假设我有一个活动,开始日期为2015年1月1日,结束日期为2015年12月31日 如果有以下日期,我无法插入事件:

  • 2014年12月31日至2016年1月1日
  • 2015年2月1日至2015年12月30日
  • 2014年12月31日至2015年6月1日
  • 2015年2月1日至2016年1月1日
或者,谈论整数:

  • 范围为2…6的现有记录
可能的无效记录:

  • 1..3
  • 3..5
  • 5..7
  • 1..7
匹配此条件的较短表达式是什么

当(且仅当)第一个起点小于第二个终点,而第二个起点小于第一个终点时,任何两个范围重叠

因此,您希望测试传入记录的开始日期和结束日期与表中任何记录的此条件不匹配

这是一个视觉证明-两条线可以重叠的所有方式:

1。
s1 |----------------e1
s2 |----------------e2
2.
s1 |-----e1
s2 |----------------e2
3.
s1 |----------------e1
s2 |----------------e2
4.
s1 |------------------e1
s2 |----------------e2
5.
s1 |----------------e1
s2 |--------------------e2
如您所见,
s1
总是比
e2
小,而
s2
总是比
e1

当两条线不重叠时,情况并非如此:

1。
s1 |----------------e1
s2 |----------------e2
2.
s1 |----------------e1
s2 |----------------e2
正如您在这里看到的,
s1
大于
e2
或者
s2
大于
e1


只要是可比较的,实际数据类型就完全不相关。

您可能可以执行以下操作:

SELECT count(*) FROM tablename 
WHERE :inputDate1 BETWEEN date1 AND date2 
OR :inputDate2 BETWEEN date1 AND date
OR date1 >= :inputDate1
OR date2 <= :inputDate2
从tablename中选择count(*)
其中:在date1和date2之间输入date1
或:在日期1和日期之间输入日期2
或日期1>=:inputDate1

或者date2您使用的是什么rdbms?我不完全确定这个条件是否足够,请参见问题描述中的我的更新数据类型是不相关的,只要它是可比较的。回答不错,如果有伪代码就好了@Tobia我几乎没有使用MySql的经验。我可以很容易地编写一个SQL Server代码示例,但我认为这对本例没有帮助。