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


当前回答

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

COALESCE (fieldName, '') <> ''

其他回答

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

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或空字符串或完全由空格组成的字符串的行都将被此查询排除。

SQL小提琴

以基本的方式

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

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

COALESCE (fieldName, '') <> ''

只要检查: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

一种索引友好的方法是:

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

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

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