oracle数据库中,查询时间在两个日期之间(只要重叠就算)的所有的数据。

背景介绍

今天项目中要做一个参观实验室的预约系统,其中对于用户选择的参观时间段(如2019-10-09 10:30:00至2019-10-09 11:30:00)上进行判断,如果其他的参观人员在该时间段已经预约过两次,则提示用户不能再进行预约。

解决方案

了解需求后,对于这个问题马上网上百度(大多数人一样的思路),找了很多资料,感觉不是很好,其中有一篇文章的思路还可以,https://blog.csdn.net/qq_16583687/article/details/75669865,https://blog.csdn.net/u012527802/article/details/73551236大家可以看一下。
我是按照自己的思路写的,结果也是正确的。
根据输入的两个时间参数(startTime,endTime),查询数据库表中T-startTime字段在startTime,endTime的数据(左闭右开) OR T-endTime字段在startTime,endTime的数据(左开右闭),
这时候查询的数据是不完整的,还差一种情况(startTime,endTime时间段包含T-startTime,T-endTime时间段),此时再 OR 上(T-startTime < startTime and T-endTime > endTime),这时就把所有的情况都包含进去了。根据查询的结果数如果大于2则说明不能再进行预约。
手残党将就着看吧,后面会有查询语句的。

sql查询语句

select * from HW_ORDER_T 
where 
(
	(START_TIME >= to_date('2019-10-10 10:00:00','yyyy-mm-dd hh24:mi:ss') AND START_TIME < to_date('2019-10-10 10:30:00','yyyy-mm-dd hh24:mi:ss'))
	OR
	(END_TIME > to_date('2019-10-10 10:00:00','yyyy-mm-dd hh24:mi:ss') AND END_TIME <= to_date('2019-10-10 10:30:00','yyyy-mm-dd hh24:mi:ss'))
)
OR
(
	START_TIME < to_date('2019-10-10 10:00:00','yyyy-mm-dd hh24:mi:ss') AND END_TIME > to_date('2019-10-10 10:30:00','yyyy-mm-dd hh24:mi:ss')
)

下图一是表中的原数据,图二是查询后的数据,只要是包含在该时间段内的数据都会查出。(10号的预约数据不多,之前拿九号的数据进行过测试,OK)
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值