给出以下表格和数据
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)
Run Code Online (Sandbox Code Playgroud)
我要选择没有所有行foo的name列.
SELECT * FROM #temps
WHERE name <> 'foo'
DROP TABLE #temps
Run Code Online (Sandbox Code Playgroud)
为什么这只返回第2行?第3行中的名称不是foo,应该返回.
我的解决方案是
SELECT * FROM #temps
WHERE ISNULL(name, '') <> 'foo'
Run Code Online (Sandbox Code Playgroud)
为什么这只返回第2行?第3行中的名称不是foo,应该返回.
其他人已经回答了该怎么做.至于为何如此,null代表一种未知的价值.第name3行中列的值可以是foo.我们不知道因为价值未知.
该where子句必须评估true为返回一行.name <> 'foo'不是true,它不是false未知的.