如何检查不是Null和不是空字符串在SQL服务器?

如何在SQL Server WHERE条件下检查列是否不为空而不是空字符串('')?

769116 次浏览

如果您只想将""匹配为空字符串

WHERE DATALENGTH(COLUMN) > 0

如果您想将完全由空格组成的字符串计算为空

WHERE COLUMN <> ''

当在WHERE子句中使用时,这两个函数都不会返回NULL值。As NULL将为这些对象求值为UNKNOWN,而不是TRUE

CREATE TABLE T
(
C VARCHAR(10)
);


INSERT INTO T
VALUES      ('A'),
(''),
('    '),
(NULL);


SELECT *
FROM   T
WHERE  C <> ''

只返回单行A。例如,包含NULL或空字符串或完全由空格组成的字符串的行都将被此查询排除。

< a href = " http://www.sqlfiddle.com/ !SQL小提琴3/3d933/1”> < / >

WHERE NULLIF(your_column, '') IS NOT NULL

如今(4.5年过去了),为了让人类更容易阅读,我只会使用它

WHERE your_column <> ''

虽然有一种将null检查显式化的诱惑……

WHERE your_column <> ''
AND your_column IS NOT NULL

...正如@Martin Smith在接受的答案中所演示的那样,它实际上没有添加任何东西(而且我个人现在完全避免使用SQL空,所以它对我不适用!)

Coalesce将把null值折叠成默认值:

COALESCE (fieldName, '') <> ''

一种索引友好的方法是:

where (field is not null and field <> '')

如果没有很多行或者这个字段没有索引,你可以使用:

 where isnull(field,'') <> ''

只要检查:where值> "——不为空,不为空

-- COLUMN CONTAINS A VALUE (ie string not null and not empty) :
-- (note: "<>" gives a different result than ">")
select iif(null    > '', 'true', 'false'); -- false (null)
select iif(''      > '', 'true', 'false'); -- false (empty string)
select iif(' '     > '', 'true', 'false'); -- false (space)
select iif('    '  > '', 'true', 'false'); -- false (tab)
select iif('
'                  > '', 'true', 'false'); -- false (newline)
select iif('xxx'   > '', 'true', 'false'); -- true
--
--
-- NOTE - test that tab and newline is processed as expected:
select 'x   x' -- tab
select 'x


x' -- newline

以基本的方式

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL

您可以使用其中任何一个来检查null,空白和空字符串。

WHERE COLUMN <> ''


WHERE LEN(COLUMN) > 0


WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL

由于某种原因,我的NULL值的数据长度为8。这就是为什么上面提到的方法似乎都不起作用。如果你遇到同样的问题,使用下面的代码:

--Check the length of your NULL values
SELECT DATALENGTH(COLUMN) as length_column
FROM your_table


--Filter the length of your NULL values (8 is used as example)
WHERE DATALENGTH(COLUMN) > 8