如果给定日期在范围内,Oracle会查找记录

时间:2016-11-18 12:38:40

标签: oracle datetime

我需要获得人们完成的任务的每日安排。

我的数据库中的数据存储如下

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中执行此操作?

2 个答案:

答案 0 :(得分: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-01-01' - > ' 2016-01-01 00:00:00'

答案 1 :(得分:0)

通常开始日期和结束日期都允许空值,因此除了PhillipsD答案中的between之外,您可能还需要nvl

select * from your_table
where your_date between nvl(start_date_time, your_date) and nvl(end_date_time, your_date)