Результаты с пустыми значениями в параметре в Oracle - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю параметр для даты до и от. Некоторые даты в записи отсутствуют, что означает нулевое значение. Когда мой параметр ищет между двумя значениями, он избегает тех результатов с пустой датой, но я хочу также получить эти записи.

Пример кода,

AND 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)) 

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Если вы хотите включить записи, в которых 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, но по крайней мере вам нужно убедиться, что вы сравниваете один и тот же тип данных с обеих сторон оператора =.

0 голосов
/ 19 апреля 2019

также добавьте условие nvl в PLLA.PROMISED_DATE ... и попробуйте свой код ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...