我在这里靠近墙壁......我想不出办法把它拉下来。
这是我的设置:
我的表格中有一个列完成日期。如果它从未完成,则该字段为空。很简单。
在前端,我有一个默认为“仅显示不完整的条目”的复选框。当只提取不完整的条目时,这很容易。
SELECT
*
FROM Sometable
WHERE Completed_Date IS NULL
但是提供复选框选项会使事情变得复杂。我的复选框输入一个位值:1 =仅显示不完整,0 =显示全部。
问题是,我不能在where子句中使用CASE语句,因为实际值使用“=”进行比较,而检查null使用“IS”。例如:
SELECT
*
FROM Sometable
WHERE Completed_Date IS <---- invalid syntax
CASE WHEN
...
END
SELECT
*
FROM Sometable
WHERE Completed_Date =
CASE WHEN @OnlyIncomplete = 1 THEN
NULL <----- this translates to "WHERE Completed_Date = NULL", which won't work.. I have to use "IS NULL"
...
END
知道如何完成这项看似简单的任务吗?我很难过......谢谢。
答案 0 :(得分:6)
...
WHERE @OnlyIncomplete = 0
OR (@OnlyIncomplete = 1 AND Completed_Date IS NULL)
答案 1 :(得分:0)
SELECT
*
FROM Sometable
WHERE Completed_Date IS NULL OR (@OnlyIncomplete = 0)
因此,如果OnlyIncomplete = 0,则显示Date = NULL plus,Date!= Null。是的,我认为就是这样。
答案 2 :(得分:0)
如果您仍想使用CASE功能(虽然在这种情况下可能有点过分):
SELECT
*
FROM Sometable
WHERE 1 =
(CASE WHEN @OnlyIncomplete = 0 THEN 1
WHEN @OnlyIncomplete = 1 AND Completed_Date IS NULL THEN 1
END)