получить нулевые значения с декодированием - PullRequest
0 голосов
/ 27 марта 2020

У меня есть таблица с именами, где имя может быть нулевым. Если я хочу получить все строки с нулевыми именами, я делаю следующее:

select * from table1 where name is null;

, но я хочу убедиться, что если я укажу значение, оно получит ненулевые значения, и если оно выиграет не получить нулевые значения

select * from table1 where name in decode (: var, null, name)

Итак, я получаю значения, которые не равны нулю, когда переменная равна нулю, как я могу получить значения, которые равны нулю?

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Вы, похоже, ищете нулевое безопасное равенство. В Oracle это будет выглядеть следующим образом:

where name = :var or (name is null and :var is null)

Условие успешно выполняется, если выполняется любое из следующих условий:

  • значения равны (это означает, что ни одно из они null)
  • оба значения null

Если вы заранее знаете значение, которое отсутствует в столбце, вы можете использовать coalesce() или nvl():

where nvl(name, 'N/A') = nvl(:var, 'N/A')
0 голосов
/ 28 марта 2020

Я думаю, что вы на правильном пути с DECODE. Но вам просто нужно настроить, как вы используете его. Поскольку DECODE соответствующим образом обрабатывает значения NULL, должно работать следующее:

SELECT *
FROM table1 t
WHERE DECODE(:var, t.name, 1, 0) = 1;

Из документации 19 c :

В функции DECODE Oracle считает два нуля эквивалентными. Если expr равно нулю, то Oracle возвращает результат первого поиска, который также равен нулю.

...