如何检查是不是空和SQL Server中的空string?

我们如何检查SQL Server WHERE条件列是否不为空而不是空string( '' )?

如果你只想匹配“”作为一个空string

 WHERE DATALENGTH(COLUMN) > 0 

如果要计算完全由空格组成的任何string为空

 WHERE COLUMN <> '' 

WHERE子句中使用这两种方法都不会返回NULL值。 由于NULL将评估为UNKNOWN而不是TRUE

 CREATE TABLE T ( C VARCHAR(10) ); INSERT INTO T VALUES ('A'), (''), (' '), (NULL); SELECT * FROM T WHERE C <> '' 

只返回单行A 也就是说,具有NULL或空string的行或完全由空格组成的string全部被这个查询排除。

SQL小提琴

 WHERE NULLIF(your_column, '') IS NOT NULL 

现在(4.5年),为了让人们更容易阅读,我只会使用

 WHERE your_column <> '' 

虽然有明确的空检查的诱惑…

 WHERE your_column <> '' AND your_column IS NOT NULL 

正如@马丁·史密斯在接受的答案中所表明的那样,它并没有真正添加任何东西(而且我个人现在完全避免了SQL空值,所以它不适用于我!)。

合并会将空值合并为默认值:

 COALESCE (fieldName, '') <> '' 

一个友好的索引方式是:

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

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

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

这种情况将执行“空,空或空白”检查,而不需要对LTRIMRTRIM进行不必要的string操作。

 SELECT * FROM [Table] WHERE COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 

基本的方式

 SELECT * FROM [TableName] WHERE column_name!='' AND column_name IS NOT 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 'xx' -- tab select 'x x' -- newline