Mysql 用于检查两个事件是否重叠的sql查询
我的表有3列名称、开始日期和结束日期 仅当新事件的日期不与现有事件重叠时,我才需要在表中插入记录。 假设我有一个活动,开始日期为2015年1月1日,结束日期为2015年12月31日 如果有以下日期,我无法插入事件: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
- 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代码示例,但我认为这对本例没有帮助。