2012-03-20 122 views
2

我已在我的where子句SQL - where子句NULL

WHERE st.State = @St 

以下在这种情况下@St为NULL。如果st.State也是NULL,则不会返回TRUE。 在这种情况下,我该如何处理where子句?

我在想

WHERE st.State = @St AND @St IS NULL 

但不能肯定是否会买我多少。

+1

您正在使用什么数据库管理系统? – 2012-03-20 22:16:12

回答

4

您可以使用下列内容:

WHERE (@St IS NULL AND st.State IS NULL) OR (@St = st.State) 
4
WHERE st.State = @St OR (@St IS NULL AND st.State IS NULL) 
2

尝试

WHERE (st.State = @St or (st.State is NULL and @St is NULL)) 
2

您可能需要在不同的数据库做不同的事情,而是一个普遍的做法是

WHERE st.State = @St OR (@St is NULL and st.State is NULL) 
2

不知道你是什么系统但是我很喜欢SQL Server系统上的IsNull:

WHERE (IsNull(st.State,'none')=IsNull(@St,'none') 
0

检查这一点。这将工作。

ISNULL(st.State, '')= ISNULL(@St, '')

0
select column1 from Table1 
    where (@param is null and column2 is null) 
    or (column2 = @param) 
+1

请提供更为详细的解释为什么这会起作用。 – Aibrean 2015-07-30 15:04:48