我的表有3列名称,start_date和end_date 只有当新事件的日期与现有事件重叠时,我才需要在表格中插入记录。 所以,假设我的开始日期为2015年1月1日,结束日期为2015年12月31日 如果有这样的日期,我就无法插入事件:
或者,谈论整合者:
可能的无效记录:
符合此条件的短表达式是什么?
答案 0 :(得分:4)
当(并且仅当)第一个开始小于第二个开始时,任何2个范围重叠,而第二个开始小于第一个开始。
因此,您希望测试您的传入记录的开始日期和结束日期与表中任何记录的条件不匹配。
这是一个视觉证明 - 两条线可以重叠的所有方式:
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
。
只要具有可比性,实际数据类型就完全不相关了。
答案 1 :(得分:0)
您可以执行以下操作:
SELECT count(*) FROM tablename
WHERE :inputDate1 BETWEEN date1 AND date2
OR :inputDate2 BETWEEN date1 AND date
OR date1 >= :inputDate1
OR date2 <= :inputDate2