Я использую функцию NVL в своем предложении WHERE следующим образом.
... AND NVL(FIRST_DATE, SECOND_DATE) BETWEEN (SYSDATE - 7) and SYSDATE
Что я делаю так: если FIRST_DATE равен нулю, тогда используйте SECOND_DATE для сравнения. Проблема в том, что он предотвращает использование индекса для столбца first_date или second_date. Поэтому я переписал условие в следующее:
... AND
((FIRST_DATE BETWEEN (SYSDATE-7) AND SYSDATE)
OR
(FIRST_DATE IS NULL AND SECOND_DATE BETWEEN (SYSDATE-7) AND SYSDATE))
Я протестировал его, запустив его с разными датами, и он всегда возвращал те же результаты, что и с функцией NVL. Но я хочу убедиться и проверить, не пропустил ли я никаких исключений, где результат может отличаться. Кто-нибудь может подтвердить, что то, что я сделал, семантически эквивалентно функции NVL?