2016-11-18 4 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_time или end_date_time

Можно ли сделать это в оракула?

+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-01-01» -> «2016-01-01 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

Смежные вопросы