经常会碰到比较两个时间段是否冲突的情况.

思路1

最开始比较2个时间是否的思路是,时间段的重叠.  但是比较时间段重叠的情况,就有几种情况,

1. 时间前段冲突.  

时间A:  2015-10-01  —— 2015-10-05

时间B:  2015-10-03  —— 2015-10-08

B时间前半部分与A冲突

2. 时间后段冲突.

时间A:  2015-10-05  —— 2015-10-10

时间B:  2015-10-03  —— 2015-10-08

B时间后半部分与A冲突

3.时间中段冲突.

时间A:  2015-10-05  —— 2015-10-10

时间B:  2015-10-03  —— 2015-10-15

B时间包含A时间

思路2

对于上述的这些种情况.相对来说判断分支比较多,写起来比较复杂,后来整理了一下思路.换一种方式来. 通过取反的方式.这样其实就只有2种情况了.

1.时间前段不冲突.

时间A:  2015-10-05  —— 2015-10-10

时间B:  2015-10-11  —— 2015-10-15

B的开始时间比A的结束时间还晚,肯定不冲突了.

2.时间后段不冲突.

时间A:  2015-10-05  —— 2015-10-10

时间B:  2015-10-01  —— 2015-10-04

B的结束时间比A的开始时间还早,也肯定不冲突了.

通过这2个情况,再取反.不就是两个时间段有冲突的情况了吗.Oracle中借助not函数可以轻松取反. sql如下:

select ... from  table t where ... and  not ( t.betginTime > '参数结束时间' or t.endTime < '参数开始时间' )

例:

select  *  from  tr_schedule_affair  where  not(('2017-05-23 10:00' > end_time) or (start_time >  '2017-05-23 12:30')) 

通过

beginTime > 参数结束时间,可以找到时间前段不冲突的数据,

endTime < 参数开始时间,可以找到时间后段不冲突的数据.

再取反之后就是冲突的数据.

Oracle两个时间段是否重合、冲突的更多相关文章

  1. Oracle判断两个时间段是否相交

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

  2. sql语句判断两个时间段是否有交集

    场景:  数据库有有两个字段.开始时间<startTime>,和结束时间<endTime>,指定一个时间段(a,b),a表示开始时间,b表示结束时间.看数据库中有没有与(a,b ...

  3. Android 比较两个时间段是否有交集或重复

    先看一个例图: 在金山<电池管家>应用中就有一个类似上图这样的功能—— 开启多个定时任务. 当开启另一个定时任务的时候,如果即将开启的这个定时任务的时间段与已经开启了的定时任务的时间段有交 ...

  4. PHP计算两个时间段是否有交集(边界重叠不算)

    优化前的版本: /** * PHP计算两个时间段是否有交集(边界重叠不算) * * @param string $beginTime1 开始时间1 * @param string $endTime1 ...

  5. Oracle 两个表之间更新的实现

    Oracle 两个表之间更新的实现   来源:互联网 作者:佚名 时间:2014-04-23 21:39 Oracle中,如果跨两个表进行更新,Sql语句写成这样,Oracle 不会通过.查了资料,S ...

  6. oracle 两个时间相减

    oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 为相差的小时数 oracle 两个时间相减默认的是天数*24*60 为相差的分钟数 oracle 两个时间相减默认 ...

  7. Oracle两张表关联批量更新其中一张表的数据

    Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...

  8. oracle 根据一个时间段获取这个时间段内所有月份、天数、日期

    注:本文来源于< oracle 根据一个时间段获取这个时间段内所有月份.天数.日期 > 获取月份列表: SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2014-10 ...

  9. mysql判断两个时间段是否有交集

    //判断两个时间段是否有交集 private function checkTimeCross($start_time,$end_time){ $sql ) AND ((start_time > ...

随机推荐

  1. Python+Selenium 自动化实现实例-打开浏览器模拟进行搜索数据并验证

    #导入模块 from selenium import webdriverfrom selenium.webdriver.common.keys import Keys #启动火狐浏览器driver = ...

  2. python基础(1)---python简介

    一.python简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言.目前Python已经成为实际上除了中国最流行的开发语 ...

  3. 如何设置WordPress文章特色图像(Featured Image)

    WordPress的特色图像(Featured Image)是一个很方便的功能,过去为了给每篇文章设置一个缩略图,我们需要用脚本去匹配文章中的第一张或者最后一张图片,或者通过附件方式获取图片,有了特色 ...

  4. 继续ajax长轮询解决方案--递归

    如果使用for,会有一种情况发生,就是ajax的执行会大于其他的动作的执行,那么这样的一段代码就不能实现了 for(var i=0;i<20;i++){ console.log('你好') $. ...

  5. 在web项目中发布jaxws

    概述 在web项目中发布基于jaxws的webservice. 参考文章:用JAX-WS在Tomcat中发布WebService 参考文章说,如果不是servlet3.0及以上,需要配置servlet ...

  6. npp插件-NewFileBrowser:自定义模板

    ☞ 概述 NewFileBrowser用于定义文件的初始化文本.当我们创建一个jsp文件,或者spring bean的配置文件,或者maven的pom文件... 总有一些内容是固定的:把这些内容建立成 ...

  7. HDU 6073 Matching In Multiplication(拓扑排序)

    Matching In Multiplication Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K ( ...

  8. .NET分层登陆——机房收费系统再总结

    去年的时候,我写过一篇机房收费系统登陆的总结文章,那是站在VB的基础上,直接查询数据库实现的登陆.是很初期的知识.如果想了解详情,请看VB查询数据库之登陆窗体--机房收费系统总结(一). 今天,我要换 ...

  9. java.lang.NegativeArraySizeException

    两台android设备发送图片. 发送端: Socket socket = null; try { socket = new Socket(ip, 8888); byte[] bytes = Scre ...

  10. 【Floyd】文化之旅

    [NOIP2012]文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 ...