我有一个程序接收名为@FL_FINALIZADA
的位变量。
如果它为null或false,我想限制我的select只显示包含null 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
。
我怎样才能做到这一点?
提前致谢。
答案 0 :(得分:7)
SELECT
*
FROM
MyTable
WHERE
(ISNULL(@FL_FINALIZADA, 0) = 0
AND
OPE.DT_FINALIZACAO IS NULL
)
OR
(@FL_FINALIZADA = 1
AND
OPE.DT_FINALIZACAO IS NOT NULL
)
答案 1 :(得分:0)
将AND更改为:
AND (((@FL_FINALIZADA <> 1) AND (OPE.DT_FINALIZACAO IS NULL)) OR ( (@FL_FINALIZADA = 1) AND (OPE.DT_FINALIZACAO IS NOT NULL)))
如果位标志为1,则DT_FINALIZACAO不能为空。
答案 2 :(得分:0)
IF @FL_FINALIZADA IS NULL
SET @FL_FINALIZADA = 0
SELECT * FROM NewsletterSubscribers
WHERE
(@FL_FINALIZADA = 0 AND OPE.DT_FINALIZACAO IS NULL)
OR
(@FL_FINALIZADA = 1 AND OPE.DT_FINALIZACAO IS NOT NULL)
答案 3 :(得分:-4)
我的详细SQL有点生疏,但您尝试使用0而不是NULL吗?我希望0在那个选择
中评估与NULL相同