Как сделать NULL равным нулю в Oracle - PullRequest
3 голосов
/ 08 августа 2011

У меня есть переменная, передаваемая в мой сохраненный процесс, и это фильтр (в основном).Однако иногда это поле может быть пустым, и если оно есть, я хочу иметь возможность проверить строки, для которых это поле равно нулю.

Например,

Таблица A:

VALUE_COLUMN | FILTER_COLUMN
----------------------------
A            |  (NULL)
B            |  (NULL)           
C            |  (NULL)
D            |  (NULL)
A            |  1
E            |  (NULL)
F            |  (NULL)
B            |  1

Запрос (с входными данными, val, filter):

SELECT  COUNT(1)
  FROM    TableA
WHERE 
  wrap_up_cd = val
  AND brn_brand_id = filter

Ожидаемый ввод / вывод:

val = A, filter = (null) = 1
val = A, filter = 1 = 1
val = C, filter = 1 = 0

Как заставить Oracle вести себя таким образом

Ответы [ 3 ]

8 голосов
/ 08 августа 2011

Как насчет:

SELECT  COUNT(1)
  FROM    TableA
WHERE 
  wrap_up_cd = val
  AND ((brn_brand_id = filter) OR (brn_brand_id IS NULL AND filter IS NULL))

Я не эксперт Oracle, но я бы ожидал, что сработает - в основном, сделайте запрос соответствующим, если оба фильтра и имеют значение NULL.

2 голосов
/ 08 августа 2011

Oracle не имеет функции ISNULL. Так что вам нужно что-то вроде

SELECT COUNT(*)
  FROM tableA
 WHERE brn_brand_id = filter
    OR (    brn_brand_id IS NULL 
        AND filter IS NULL)
0 голосов
/ 29 августа 2017

Иногда это может быть удобно:

   SELECT COUNT(*)
      FROM tableA
   WHERE
      NVL(brn_brand_id, CHR(0)) = NVL(filter, CHR(0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...