判断两个时间段是否相交
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)
参考文件
1.《SQL Server2005技术内幕:T-SQL程序设计》
分享到:
相关推荐
判断通过空间的坐标点确定的选段是否相交,相交的求出交点
直线相交容易判断,但判断两条线段是否相交有些困难,本代码不但能判断是否相交,还能求出交点坐标。
编程实现了如何判断一个平面里的两条线段是否相交!
给出两个单向链表的头指针(如图3-8 所示),比如h1、h2,判断这两个链表是否 相交。这里为了简化问题,我们假设两个链表均不带环。
判断任意位置旋转的矩形是否相交,相交输出true,否则输出false。
perl 依四点的坐标,判断两线段是否相交,若相交求出交点。
1. 判断两个起止时间是否相交: public static bool IsTimeBetween(TimeSpan input, TimeSpan start, TimeSpan end, bool fromInclusice, bool toInclusive) { //...
Unity3D判断两个物体相交脚本 Posted on 2013年02月25日 by U3d / Unity3D脚本/插件/被围观 285 次 Unity3D中
(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法; (2)定义一个圆形类,其属性包括圆心和半径;...(3)创建两个圆形对象,提示用户输入圆心坐标和半径,判断两个圆是否相交,并输出结果。
分析与解法 这样的一个问题,也许我们平时很少考虑。但在一个大的系统中,如果出现两个链表相 交的情况,而且释放了其中一个链表的...的两个链表,我们希望在释放一个链表之前知道是否有其他链表跟当前这个链表相交。
算法分析中判断两线段是否相交问题,提供相关的代码
用VC6.0实现的MFC单文档程序,用鼠标在屏幕上任意画两条直线,判断两直线是否相交。
创建两个圆形对象,提示用户输入圆心坐标和半径,判断两个圆是否相交,并输出结果。 方法:定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;定义一个Circl类,其属性包括圆心和半径。
这个方法很简单,几句就可以,经过本人呕心沥血思考,终于想出这么简单的两句判断直线相交,真心了不起直线相交,真心了不起直线相交,真心了不起
判断两线段是否相交[归类].pdf
两线段是否相交C#
geotools 判断几何要素的交点 当时想到用的GDAL 但是 交点函数返回的对象总是null , 改用 GeoTools 这个库,需要用到jar 到官网上下载,主要是jts-core-1.16.0.jar
原文地址 http://www.cnblogs.com/topcss/p/3575248.html ,基于该作者的代码基础上进行简单修改,使其在openlayers3上可用,有兴趣可以去看一下