代码之家  ›  专栏  ›  技术社区  ›  nhrcpt

SQL从范围Null、0&1中选择值为Null和0的值

  •  0
  • nhrcpt  · 技术社区  · 5 年前

    T-SQL查询返回的列之一具有以下三个值之一

    NULL, 0, 1
    

    我试图过滤掉1的值,但是当我使用这些子句时:

    查询:

    select foo 
    from dbo.table1
    where ..
    

    1. where foo <> 1 :只返回列中值为0的数据
    2. Where foo is null :只返回列中的空值
    3. where foo in (Null, 0) :只返回列中值为0的数据

    过滤数据的正确方法是什么?

    2 回复  |  直到 5 年前
        1
  •  5
  •   forpas    5 年前

    因为只有3个值,这就足够了:

    where isnull(foo, 0) <> 1
    

    或:

    where isnull(foo, 0) = 0
    
        2
  •  5
  •   Gordon Linoff    5 年前

    where foo <> 1 or foo is null
    

    或者,如果你知道只有三种价值观,比如:

    where coalesce(foo, -1) <> 1
    

    SQL Server没有 NULL -安全比较。标准SQL支持:

    where foo is distinct from 1
    

    但这在SQL Server中是不可用的。