Oracle两个时间段是否重合、冲突
经常会碰到比较两个时间段是否冲突的情况.
思路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两个时间段是否重合、冲突的更多相关文章
- Oracle判断两个时间段是否相交
SQL中常常要判断两个时间段是否相交,该如何判断呢?比如两个时间段(S1,E1)和(S2,E2).我最先想到的是下面的方法一.方法一:(S1 BETWEEN S2 AND E2) OR (S2 BET ...
- sql语句判断两个时间段是否有交集
场景: 数据库有有两个字段.开始时间<startTime>,和结束时间<endTime>,指定一个时间段(a,b),a表示开始时间,b表示结束时间.看数据库中有没有与(a,b ...
- Android 比较两个时间段是否有交集或重复
先看一个例图: 在金山<电池管家>应用中就有一个类似上图这样的功能—— 开启多个定时任务. 当开启另一个定时任务的时候,如果即将开启的这个定时任务的时间段与已经开启了的定时任务的时间段有交 ...
- PHP计算两个时间段是否有交集(边界重叠不算)
优化前的版本: /** * PHP计算两个时间段是否有交集(边界重叠不算) * * @param string $beginTime1 开始时间1 * @param string $endTime1 ...
- Oracle 两个表之间更新的实现
Oracle 两个表之间更新的实现 来源:互联网 作者:佚名 时间:2014-04-23 21:39 Oracle中,如果跨两个表进行更新,Sql语句写成这样,Oracle 不会通过.查了资料,S ...
- oracle 两个时间相减
oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 为相差的小时数 oracle 两个时间相减默认的是天数*24*60 为相差的分钟数 oracle 两个时间相减默认 ...
- Oracle两张表关联批量更新其中一张表的数据
Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...
- oracle 根据一个时间段获取这个时间段内所有月份、天数、日期
注:本文来源于< oracle 根据一个时间段获取这个时间段内所有月份.天数.日期 > 获取月份列表: SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2014-10 ...
- mysql判断两个时间段是否有交集
//判断两个时间段是否有交集 private function checkTimeCross($start_time,$end_time){ $sql ) AND ((start_time > ...
随机推荐
- cvs 日常使用
http://www.51testing.com/html/44/17144-2954.html http://www.chedong.com/tech/cvs_card.html
- react native 增加react-native-camera
前提:已经正常运行的项目 第一步:使用命令加入react-native-camera,并且关联react-native-camera, yarn add react-native-camera rea ...
- <<持续交付>>终点的精彩
1,向敏捷转变的过程是一个很容易出乱子的过程, 尤其对项目的领导力来说.在实施敏捷的过程中,会突然释放出一些有用的信息,将原来隐蔽起来的真相推倒聚光灯下. 2,假如执行者忽略了技术实践(比如测试驱动开 ...
- spring.net 在demo中的分析
1.认识spring.net Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入.面向方面编程(AOP).数据访问抽象及AS ...
- 洛谷P2556 [AHOI2002] 黑白图像压缩 [模拟]
题目传送门 黑白图像压缩 题目描述 选修基础生物基因学的时候, 小可可在家里做了一次图像学试验. 她知道:整个图像其实就是若干个图像点(称作像素)的序列,假定序列中像素的个数总是 8 的倍数, 于是每 ...
- Flask实战第38天:前台模型创建
安装shortuuid pip install shortuuid 编辑front.models.py from exts import db import shortuuid from werkze ...
- 【java回调】同步/异步回调机制的原理和使用方法
回调(callback)在我们做工程过程中经常会使用到,今天想整理一下回调的原理和使用方法. 回调的原理可以简单理解为:A发送消息给B,B处理完后告诉A处理结果.再简单点就是A调用B,B调用A. 那么 ...
- java 反射 获取Class对象的三种方式
String str="hello world"; //方式一 :通过对象的getClass()方法 Class<?> clazz1 =str.getClass(); ...
- Python开发基础-Day5-字符编码、文件处理和函数基础(草稿)
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- AGC 026 C - String Coloring
题面在这里! 比较简单的折半搜索,推一下hash函数,要求正反最后相等就行了. #include<bits/stdc++.h> #define ll unsigned long long ...