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

use*_*935 183 sql sql-server

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

Mar*_*ith 275

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

WHERE DATALENGTH(COLUMN) > 0 
Run Code Online (Sandbox Code Playgroud)

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

WHERE COLUMN <> '' 
Run Code Online (Sandbox Code Playgroud)

NULLWHERE子句中使用时,这两个都不会返回值.正如NULL将评估UNKNOWN这些而不是TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

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

SELECT * 
FROM   T 
WHERE  C <> ''
Run Code Online (Sandbox Code Playgroud)

只返回单行A.即具有NULL或者空字符串的行或者完全由空格组成的字符串都被此查询排除.

SQL小提琴

  • 因为如果`column`有一个索引,那么你的查询可能不会使用它 (10认同)
  • 为什么不`'COEREESCE(列,'')<>''`? (6认同)

one*_*hen 99

WHERE NULLIF(your_column, '') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

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

WHERE your_column <> ''
Run Code Online (Sandbox Code Playgroud)

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

WHERE your_column <> '' 
      AND your_column IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

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


Ano*_*rma 13

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

COALESCE (fieldName, '') <> ''
Run Code Online (Sandbox Code Playgroud)


Luc*_*Luc 7

一种友好的索引方式是:

where (field is not null and field <> '')
Run Code Online (Sandbox Code Playgroud)

如果行数不多或此字段未编入索引,则可以使用:

 where isnull(field,'') <> ''
Run Code Online (Sandbox Code Playgroud)


DxT*_*xTx 7

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

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)


小智 6

基本地

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

  • 无需检查它是否不为 NULL,column_name !='' 即可做到这一点。因此表达式可以简化。 (4认同)