Sql-сервер, где регистр тогда равен нулю, иначе не равен нулю

У меня есть процедура, которая получает битовую переменную с именем @FL_FINALIZADA.

Если это значение null или false, я хочу ограничить свой выбор, чтобы отображались только строки, содержащие нулевые значения DT_FINALIZACAO. В противном случае я хочу показать строки, содержащие ненулевые значения DT_FINALIZACAO.

Что-то вроде этого:

SELECT 
    * 
FROM 
    MyTable 
WHERE 
    ...
    AND
    (
        OPE.DT_FINALIZACAO = (
            CASE
                WHEN (@FL_FINALIZADA <> 1)
                    THEN NULL
                END
        ) OR 
        OPE.DT_FINALIZACAO IS NOT NULL
    )

В этом случае я получаю сообщение:

Ни одно из результирующих выражений в спецификации CASE не может быть NULL.

Как я могу этого добиться?

Заранее спасибо.


person Fabio Montezuma    schedule 21.12.2010    source источник
comment
Я не уверен, зачем вам вообще нужен оператор case в этом примере.   -  person u07ch    schedule 21.12.2010


Ответы (3)


Измените И на:

AND (((@FL_FINALIZADA <> 1) AND (OPE.DT_FINALIZACAO IS NULL)) OR ( (@FL_FINALIZADA = 1) AND (OPE.DT_FINALIZACAO IS NOT NULL)))

Если битовый флаг равен 1, то DT_FINALIZACAO не может быть нулевым.

person NotMe    schedule 21.12.2010
comment
это вернет значения null и non, когда @FL_FINALIZADA равно 0 - person Steven K.; 21.12.2010
comment
передается NULL, запрос вернет пустой набор результатов - person Quassnoi; 21.12.2010

Мой подробный SQL немного заржавел, но пробовали ли вы использовать 0 вместо NULL? Я бы ожидал, что 0 будет оценивать то же самое, что и NULL в этом выборе

person digacid    schedule 21.12.2010

person    schedule
comment
Ненулевые значения будут отображаться, даже если вы передадите NULL или FALSE. - person Quassnoi; 21.12.2010
comment
Как-то связано с моим недавним ответом :-) sql">stackoverflow.com/questions/4495974/ - person Michael Buen; 21.12.2010
comment
Я пришел к чему-то подобному, проведя несколько часов в неправильном направлении. Спасибо, в любом случае. - person Fabio Montezuma; 22.12.2010