Sql server 当where语句中有NOTNULL子句时,为什么查询返回空值
我试图获得不同的非空值,但这似乎不起作用:Sql server 当where语句中有NOTNULL子句时,为什么查询返回空值,sql-server,Sql Server,我试图获得不同的非空值,但这似乎不起作用: SELECT DISTINCT ITEM FROM TABLE WHERE ITEM IS NOT NULL 它返回不同的值,但也返回空值 样本: ITEM a a b b c c NULL 输出: a b c NULL 试试这个。“不为空”和“为空”不适用于空值。如果该列允许为空,则可以涵盖这两个方面 SELECT DISTINCT item FROM table WHERE ISNULL(item,'') <>
SELECT DISTINCT ITEM
FROM TABLE
WHERE ITEM IS NOT NULL
它返回不同的值,但也返回空值
样本:
ITEM
a
a
b
b
c
c
NULL
输出:
a
b
c
NULL
试试这个。“不为空”和“为空”不适用于空值。如果该列允许为空,则可以涵盖这两个方面
SELECT
DISTINCT item FROM table
WHERE
ISNULL(item,'') <> ''
选择
表中的不同项
哪里
ISNULL(项目“”)“”
此语句将返回abc
,除非列中的字符串为NULL而不是符号
:
SELECT DISTINCT ITEM FROM TABLE WHERE ITEM IS NOT NULL
要测试这一点,请尝试这些
--check for
SELECT DISTINCT ITEM FROM TABLE WHERE ITEM = 'NULL'
--modify original query
SELECT DISTINCT ITEM FROM TABLE WHERE NULLIF(ITEM, 'NULL') IS NOT NULL
检查项是否为Varchar类型,并在其中存储值“NULL”。如果是,请尝试以下查询:
select distinct item from table where ISNULL(item,'')<>'' and item <> "NULL"
从ISNULL(项“”)“”和项“NULL”所在的表中选择不同的项
您的查询没有问题。我怀疑你的数据。试试这个where子句其中ITEM不为NULL和ITEM‘NULL’
您接受的答案无法解释您所说的结果。ITEM
avarchar(max)
列以前是text
?如果是这样的话,那么为什么这个空白值会导致NULL或“NULL”输出?如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮({}
),以很好地格式化和语法突出显示它!此where子句将筛选空值和空值。但是,它不会过滤“NULL”值。我很困惑。@pst:我同意你的观点。如果存在字符串为NULL的值,则这将不起作用:如果IS NOT NULL失败,并且我们在输出中看到NULL,则它们必须存在-因此,对此回答-1我将接受批评,因为我不希望字符串“NULL”实际出现在数据中。此外,每个人都希望每个模式在存储数据方面都过于完美。如果列确实不接受null作为值(而不是“null”字符串),那么最好的选择是NULLIF(项,'null')不为null。该子句过于复杂,还将抑制空白字段!我认为ITEM'NULL'和ITEM NOT NULL可能更适合这里。你的意思是“NULLIF(ITEM'NULL')'NULL'?@Ben Thul:NULLIF会将字符串'NULL'更改为ymbol/value NULL。所以这很有效。