2013-08-01 2 views
-3

У меня есть запрос с тремя приглашениями; Отдел, от даты и до даты. Нужно выбрать идентификатор отдела, но есть возможность выбрать диапазон дат. Как изменить диапазон дат? Я думал об использовании функции декодирования, но не уверен, как его записать, поэтому две подсказки даты могут быть пустыми.Функция декодирования

+0

Информация не достаточна. Вы должны указать данные примера и, возможно, ожидаемый результат. – Parado

ответ

0

При использовании хранимой процедуры вы можете сделать что-то подобное в вашем заявлении выберите:

select * 
from table 
where (field > inDateStart and field < inDateEnd) or 
     (inDateStart is null and inDateEnd is null) 

или с использованием сливаться

select * 
from table 
where (field => coalesce(inDateStart,field) and 
     field <= coalesce(inDateEnd,field) 

Это действительно зависит от вашей конкретной ситуации. Некоторые запросы поддаются первым ко второму.

0

Предполагая неопределенный ввод даты попадается, как NULL, вы можете сделать это маленькую хитрость:

with 
TheTable as 
(select 1 dept, sysdate dt from dual 
union 
select 2 dept, sysdate-63 dt from dual 
union 
select 3 dept, sysdate-95 dt from dual 
) 
select * 
from thetable 
where coalesce(:DateFrom,dt) <= dt 
and coalesce(:DateTo,dt) >= dt 
; 

нужна немного больше информации о характере данных для рассмотрения отдела в качестве вклада ... ли таблица хранит несколько дат за департамент?

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