2016-11-18 98 views
-1

我需要获取人员完成任务的每日时间表。如果给定日期在范围内,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_timeend_date_time

是否有可能做到这一点在Oracle?

+0

你什么意思通过比较日期(与时间的天没有分量)以日期时间做?如果输入是12-10-2016,那么它会落在第二行范围内吗? (如果是这样,为什么?如果不是,为什么不?) – mathguy

回答

0

尝试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”

0

通常开始日期和结束日期允许空值,从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

相关问题