如何检查是不是空和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,'') <> ''
这种情况将执行“空,空或空白”检查,而不需要对LTRIM
和RTRIM
进行不必要的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