如何检查SQL服务器中是否为空且不是空字符串?

时间:2011-12-28 19:13:21

标签: sql sql-server

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

8 个答案:

答案 0 :(得分:245)

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

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 Fiddle

答案 1 :(得分:86)

WHERE NULLIF(your_column, '') IS NOT NULL

如今(4。5年),为了让人们更容易阅读,我只会使用

WHERE your_column <> ''

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

WHERE your_column <> '' 
      AND your_column IS NOT NULL

...正如@Martin Smith在接受的答案中所展示的那样,它并没有真正添加任何东西(我个人现在完全避免使用SQL null,所以它无论如何都不适用于我!)。

答案 2 :(得分:12)

Coalesce会将空值折叠为默认值:

COALESCE (fieldName, '') <> ''

答案 3 :(得分:5)

这样做的索引友好方式是:

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

如果没有多行或此字段未编入索引,您可以使用:

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

答案 4 :(得分:4)

基本方式

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

答案 5 :(得分:0)

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

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

答案 6 :(得分:0)

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

--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

答案 7 :(得分:-1)

只需检查:其中值&gt; '' - 不为空而不是空

-- 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