2016-01-28 1 views
0

В BI-ИЗДАТЕЛЬЕ у меня есть два параметра STARTDATE и ENDDATE.BI Издатель - Параметры между датами

В таблице ACTIVE_DATE есть поле, которое будет использоваться в приведенных выше параметрах.

Я использую следующее условие в запросе:

trunc(active_date) between NVL(:P_Active_Date, trunc(active_date)) 
and NVL(:P_Close_Date, trunc(active_date) 

Если оба параметра равны нулю, то следует выбрать все диапазоны дат.

Но когда я применяю эти параметры, это не показывает мне правильный результат. Даже когда я выбираю оба параметра, он по-прежнему не показывает мне правильный результат.

Как это сделать?

+0

Попробуйте изменить в active_date NVL до 01/01/0001 и 31/12/2999 – sagi

ответ

0

В случае, если ваши даты атрибуты имели различный час в тот же день, вы можете сделать это:

where 
trunc(active_date) 
between to_date((NVL(:p_Active_Date, trunc(active_date))),'DD/MM/YYYY') 
and to_date((NVL(:p_Close_Date, trunc(active_date)) ),'DD/MM/YYYY') 

У меня была одна проблема, как, что и запрос не показал мне записи в диапазоне из параметры, которые у меня были.

Надеюсь, это поможет.

0

Попробуйте

WHERE 
(:P_START_DATE IS NULL OR trunc(ACTIVE_DATE) > :P_START_DATE) 
AND 
(:P_END_DATE IS NULL OR trunc(ACTIVE_DATE) < :P_END_DATE) 

Обычно параметр является дата, и таблица содержит дату начала/конца, хотя.

WHERE 
(:P_ACTIVE_DATE IS NULL 
OR ((START_DATE IS NULL OR START_DATE <= :P_ACTIVE_DATE) 
AND (END_DATE IS NULL OR END_DATE > :P_ACTIVE_DATE))) 

Ни один из них не может удовлетворить ваши потребности, но вы получаете, как И/ИЛИ работают с IS NULL.