SQL select不是字符串不返回NULL值

时间:2011-06-17 20:53:48

标签: sql-server tsql

给出以下表格和数据

CREATE TABLE #temps
(
    id int,
    name varchar(max)
)

INSERT INTO #temps VALUES (1, 'foo')
INSERT INTO #temps VALUES (2, '')
INSERT INTO #temps VALUES (3, NULL)

我想选择foo列中没有name的所有行。

SELECT * FROM #temps
WHERE name <> 'foo'

DROP TABLE #temps

为什么这只返回#2行?第3行中的名称不是foo,应该返回。

3 个答案:

答案 0 :(得分:5)

  

为什么这只返回#2行?该   第3行中的名称不是foo而应该   被退回。

其他人已经回答了该怎么做。至于为何如此,null表示未知值。第3行中的列name的值可能foo。我们不知道因为价值未知。

where子句必须评估为true才能返回一行。 name <> 'foo'不是true,而false不是{1}}。

答案 1 :(得分:4)

您需要where Name <> 'foo' or Name is null。 无法比较Null是否相等。

答案 2 :(得分:4)

我的解决方案是

SELECT * FROM #temps
WHERE ISNULL(name, '') <> 'foo'