Если вы хотите включить записи, в которых PLLA.PROMISED_DATE равен нулю, вам просто нужно включить этот критерий в предложение WHERE:
AND ( PLLA.PROMISED_DATE is null or
TO_DATE(PLLA.PROMISED_DATE) BETWEEN NVL (to_char(to_date(substr(:PROMISED_DATE_FROM,1,20),'YYYY/MM/DD'),'DD-MON-YY'),TO_DATE(PLLA.PROMISED_DATE))
and NVL (to_char(to_date(substr(:PROMISED_DATE_to,1,20),'YYYY/MM/DD'),'DD-MON-YY'),TO_DATE(PLLA.PROMISED_DATE))
)
Ваш опубликованный пример кода действительно трудно понять. Переключение to_char()
и to_date()
всегда является красным флагом. Было бы лучше, если бы: PROMISED_DATE_FROM и: PROMISED_DATE_TO были переданы как фактические даты. Но если они передаются в виде строк, зачем нужна substr()
? И если переданные параметры содержат посторонние символы, почему длина подстроки не превышает 10 символов, длина маски даты, которую вы используете в to_date()
?
Кроме того, почему вы затем переворачиваете параметры обратно в строки, когда применяете to_date()
к PLLA.PROMISED_DATE? Было бы плохим показом, если бы этот столбец не был типом данных date, но по крайней мере вам нужно убедиться, что вы сравниваете один и тот же тип данных с обеих сторон оператора =
.