如何在SQL Server中检查“是否为空”和“不为空”字符串?


201

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

Answers:


302

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

WHERE DATALENGTH(COLUMN) > 0 

如果要将所有完全由空格组成的字符串计为空

WHERE COLUMN <> '' 

NULL当在WHERE子句中使用时,这两个都不会返回值。至于NULL将评估UNKNOWN这些而不是TRUE

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

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

SELECT * 
FROM   T 
WHERE  C <> ''

仅返回单行A。即该NULL查询排除具有或为空字符串或完全由空格组成的字符串的行。

SQL小提琴


6
为什么不WHERE COALESCE(column, '') <> ''呢?
Lieven Keersmaekers

10
因为如果column有索引,那么您的查询可能不会使用它
Lamak

106
WHERE NULLIF(your_column, '') IS NOT NULL

如今(4.5年后),为了使人类更容易阅读,我将使用

WHERE your_column <> ''

虽然有使空检查变得明确的诱惑...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

...正如@Martin Smith在接受的答案中所演示的那样,它实际上并没有添加任何内容(而且我个人现在完全避免使用SQL空值,因此无论如何也不适用于我!)。


15

合并将空值折叠为默认值:

COALESCE (fieldName, '') <> ''


7

一种索引友好的方式是:

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

如果行数不多或未对该字段建立索引,则可以使用:

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

2

您可以使用其中之一来检查null,空格和空字符串。

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

0

只需检查:其中值>''-不为null也不为空

-- 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.