SQL查询 - 如何按null或不为null进行过滤

时间:2011-03-28 03:25:55

标签: sql sql-server database sql-server-2008

我想过滤一条记录......

如果statusid为null,则过滤记录(其中statusId不为空)

如果statusid不为null,则过滤statusid等于指定statusid的记录。

我该怎么做?

6 个答案:

答案 0 :(得分:51)

就像你说的那样

select * from tbl where statusid is null

select * from tbl where statusid is not null

如果你的statusid不为null,那么当你有一个实际值时它会被选中就好了,如果那是你想的那样就不需要任何“if”逻辑

select * from tbl where statusid = 123 -- the record(s) returned will not have null statusid

如果要选择null或值的位置,请尝试

select * from tbl where statusid = 123 or statusid is null

答案 1 :(得分:3)

statusid = statusid怎么样? Null永远不会等于null。

答案 2 :(得分:2)

WHERE something IS NULL

WHERE something IS NOT NULL

答案 3 :(得分:1)

关闭ansi_nulls 走 从表t中选择* 在t.statusid = o.statusid上连接otherTable o 走 设置ansi_nulls 去

答案 4 :(得分:0)

我认为这可行:

select * from tbl where statusid = isnull(@statusid,statusid)

答案 5 :(得分:0)

无论您何时尝试检查列的NULL值,都应使用

IS NULL IS NOT NULL

您不应该使用 = NULL或== NULL


示例(NULL)

select * from user_registration where registered_time IS NULL 

将返回registered_time值为NULL

的行


示例(非空)

select * from user_registration where registered_time IS NOT NULL 

将返回registered_time值为NOT NULL的行

注意:关键字nullnot nullisnot case sensitive