如果给定日期在范围内,Oracle会查找记录
问题描述:
我需要获取人员完成任务的每日时间表。如果给定日期在范围内,Oracle会查找记录
在我的数据库中的数据存储这样
sno | start_date_time | end_date_time |
---------------------------------------------------
1 |06-10-2016 09:30:00 | 06-10-2016 17:00:00 |
2 |12-10-2016 08:00:00 | 15-10-2016 13:00:00 |
我的问题是,如果我给例如14-10-2016
的日期我想获得第二个记录。
我不知道如何查询它自定的日期不属于start_date_time
或end_date_time
是否有可能做到这一点在Oracle?
答
尝试between
select * from your_table
where your_date between start_date_time and end_date_time
例子:
select * from (
select '2016-01-05' as t1, '2016-02-05' as t2
union all
select '2016-05-05' as t1, '2016-08-05' as t2
) a
where '2016-02-01' between t1 and t2
给
t1 t2
2016-01-05 2016-02-05
当然这也适用不仅为日期,但也为时间戳。
请记住,比较日期时,时刻日期被铸成一个 时间戳这样的“2016年1月1日” - >“2016年1月1日00:00:00”
答
通常开始日期和结束日期允许空值,从between
在PhillipsD回答因此除了你可能还需要nvl
:
select * from your_table
where your_date between nvl(start_date_time, your_date) and nvl(end_date_time, your_date)
+0
这是一个很好的评论! – PhillipD
你什么意思通过比较日期(与时间的天没有分量)以日期时间做?如果输入是12-10-2016,那么它会落在第二行范围内吗? (如果是这样,为什么?如果不是,为什么不?) – mathguy