`
wyf
  • 浏览: 436590 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

判断两个时间交叉

    博客分类:
  • SQL
 
阅读更多

SQL中常常要判断两个时间段是否相交,该如何判断呢?比如两个时间段(S1,E1)和(S2,E2)。我最先想到的是下面的方法一。

方法一:(S1 BETWEEN S2 AND E2) OR (E1 BETWEEN S2 AND E2)。很好理解:一个时间段的开始时间S1在另一个时间中间(S2,E2),或者结束时间E1在另一个时间中间(S2,E2)。
这个方法比较繁琐,我们来看方法二.

 

方法二:本方法先考虑这两段时间什么情况下不相交,如下图:
   -----+-----------------+-----------------+--------------+--------------

         S1                    E1                  S2                 E2

   -----+-----------------+-----------------+--------------+--------------

         S2                    E2                  S1                 E1

 无非两种情况:(S1,E1)段在(S2,E2)段前面和(S1,E1)段在(S2,E2)段后面。其对应的表达式为:(S2 > E1) OR (S1 >  E2)。于是相交条件就是 NOT((S2 > E1) OR (S1 >  E2))该式等价于


(S2 <= E1)AND (S1 <= E2)

这就是我们要的。

其实方法一和方法二的条件是一致的:
((S1 <=  E2) AND (S1 >= S2)) OR ((E1 <= E2) AND (E1 >= S2))
  =>((S1 <= E2) AND (S1 >= S2) ) OR ((S1 <= E2 ) AND (E1 >= S2))  (因为S1 <= E1)
<=> (S1 <= E2) AND ((S1 >= S2) OR (E1 >= S2))
  => (S1 <= E2) AND ((E1 >= S2 ) OR (E1 >= S2))  (因为 S1 <= E1)
<=>(S1 <= E2) AND (E1 >= S2)

分享到:
评论

相关推荐

    java 判断两个时间段是否重叠的案例

    在 Java 中,判断两个时间段是否重叠是一种常见的需求,特别是在业务逻辑中需要检查时间段的交叉情况时。在本文中,我们将介绍如何使用 Java 判断两个时间段是否重叠,并提供相关的代码实现。 首先,让我们定义一个...

    C# 判断时间段是否相交的实现方法

    C# 判断时间段是否相交的实现方法是判断两个时间段是否有交集的实现方法。该方法可以应用于各种需要判断时间段是否相交的场景,例如判断某个事件是否发生在某个时间段内、判断某个任务是否在某个时间段内完成等。 ...

    PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)

    总的来说,理解并掌握如何在PHP中判断两个时间段是否有交集是一项实用的技能,它涉及到时间戳比较、条件判断以及时间数据的处理。通过这样的函数,我们可以高效地处理涉及时间范围的问题,避免时间冲突,提高应用...

    代码判断两条线段是否相交(两种实现算法)

    在计算机图形学和几何算法中,判断两条线段是否相交是一个常见的问题。这个任务涉及到二维空间中的几何对象,特别是点、直线和线段的概念。本文将深入探讨两种不同的算法来解决这个问题,一种是“暴力”方法,另一种...

    三均线交叉提醒

    五天线和十天线之交叉,判断短线趋势,十天线和三十天线之交叉,判断周为单位的中线趋势,三十天线和六十天线的交叉,基本上就属于阶段性的长线趋势,至少影响几个月的走势.六十天和半年线的交叉,影响时间更长,半年线和年...

    表单校验时间段重叠问题

    有个统计时段的字段,需排除选择的时间范围不能与已有时间段重叠

    两个时间序列数据练习,大家试试

    在给定的标题“两个时间序列数据练习,大家试试”中,我们可以理解这是一个学习或测试时间序列分析技能的挑战。描述简单,但暗示了我们将处理两个不同的数据集,分别存储在"exercise2data.xlsx"和"exercise1data....

    java-date.zip_java

    "java-date.zip_java"这个压缩包文件可能包含了关于如何在Java中判断两个时间段是否交叉的示例或教程。下面将详细介绍如何在Java中进行这样的判断。 在Java中,我们可以使用`java.util.Date`类、`java.util....

    零延迟 TEMA 交叉 - MetaTrader 5脚本.zip

    这个脚本可以自动监测这两个指标的交叉点,当快线从下方向上穿过慢线时,通常视为买入信号;反之,如果快线从上方向下穿过慢线,则视为卖出信号。这些交叉点可以作为交易者判断市场趋势变化的重要依据。 使用...

    PHP 计算两个时间段之间交集的天数示例

    这是为了处理各种边界情况,例如两个时间段不相交或者刚好相接等情况。 1. 如果`$endDate1`小于`$startDate2`,说明日期1完全在日期2之前,交集为0。 2. 同理,如果`$startDate1`大于`$endDate2`,则说明日期2完全...

    通达信指标公式源码 鹰眼判断短中线.doc

    2. M1 和 M2:这两个变量用于计算中线判断值。M1 是当前最低价(L)的两倍减去27个周期前的最高价的两倍;M2 是27个周期前最高价的两倍减去当前最低价。同样,它们的平均值(M1+M2)/2 表示中线对称点,可以用来评估...

    C#判断是否是简单多边形

    1. **遍历顶点对**:从第一个顶点开始,逐个检查每一对相邻的边(即由两个连续顶点定义的线段)。 2. **线线相交检查**:对于每一对边,我们需要确定它们是否相交。这涉及到线段交点的计算。如果两条线段不平行,...

    C语言判断回文字符串代码.rar

    如果两个指针相遇或者交叉,且所有经过的字符都相等,那么字符串是回文。 ```c #include #include int isPalindrome(char str[]) { int start = 0; int end = strlen(str) - 1; while (start ) { if (str...

    关于MMORPG中的障碍判断

    在这种模式下,为了处理玩家作为障碍的问题,可以设定一个玩家站立的时间阈值(如300毫秒),只有当玩家在某个位置停留超过这个时间,才将其视为障碍,其他玩家才会绕行。 综上所述,MMORPG中的障碍判断是一个复杂...

    通达信指标——放量攻击(副图).doc

    放量攻击指标还使用了CROSS函数来判断移动平均线的交叉点,CROSS函数可以用来判断两个移动平均线的交叉点,若两个移动平均线的交叉点在某个时间点上,则表示市场的趋势可能会发生改变。 在放量攻击指标中,攻擊3日...

    交叉互感器电路仿真Proteus电路仿真.rar

    交叉互感器的主要特点是两个或更多的线圈相互靠近,当一个线圈中的电流变化时,会在其他线圈中产生感应电动势。这种现象被利用在电力系统的保护、测量和信号传输等方面。在电力系统中,交叉互感器常用于变压器的保护...

    MA和Alert交叉穿行 - MetaTrader 4脚本.zip

    "MA_Crossover_Alert.mq4"脚本是专为MT4平台设计的,它的主要功能是在两个不同周期的MA发生交叉时发出警报。这个脚本可以自定义设置短期MA和长期MA的周期,以及是否开启声音警报,使得交易者能够在第一时间得知潜在...

Global site tag (gtag.js) - Google Analytics