比较列中的整数是否为空?

时间:2018-04-12 21:27:21

标签: sql-server

我有一张桌子。该表有两个整数列。每列中允许空值。以下查询有效

 select * from table where col1=1 and col2 = 2

但以下两个查询都不起作用

 select * from table where col1=1 and col2 != 2 or
 select * from table where col1=1 and col2 <> = 2

我知道比较运算符不适用于具有null的列,但是&#39; =&#39;是一个比较运算符,上面的第一个查询工作。我不明白为什么第一个查询有效,第二个查询没有? (如果你看到任何拼写错误就会忽略它们,我用真实的代码测试过这个错误就是当我把它转录到这个问题时。)

这里有两个sql语句,允许您创建一个表并在其中插入数据以测试上述查询。

  CREATE TABLE Test (
  ID int,
  Col1 int,
  Col2 int)

和插入语句

 INSERT INTO test 
    (id, col1 , col2)
 VALUES 
    (1,1,NULL),
    (2,NULL,2),
    (3,1,2)

2 个答案:

答案 0 :(得分:1)

通过使用示例数据单独检查每个查询谓词的结果,可以帮助您理解。请注意,由于AND逻辑运算符,两个条件必须求值为TRUE才能返回一行。

pd.Series.extract

答案 1 :(得分:0)

如果您的评论中Col 2为2或null,那么您需要使用IS NULL

select * from table where col1=1 and col2 IS NULL

或将空值转换为其他一些未使用的值

select * from table where col1=1 and ISNULL(col2, 0) != 2

听起来那些列应该真的是位字段,但对我而言。