如何在 SQL Server 中检查 Is not Null 和 Is not Empty 字符串?

Posted

技术标签:

【中文标题】如何在 SQL Server 中检查 Is not Null 和 Is not Empty 字符串?【英文标题】:How to check for Is not Null And Is not Empty string in SQL server? 【发布时间】:2012-01-29 10:04:03 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

WHERE DATALENGTH(COLUMN) > 0 

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

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。 IE。带有NULL 或空字符串或完全由空格组成的字符串的行都被此查询排除在外。

SQL Fiddle

【讨论】:

为什么不WHERE COALESCE(column, '') &lt;&gt; '' 因为如果column有索引,那么你的查询很可能不会用到它 我不确定,但如果你写 WHERE COL'' 这将可能进行表扫描而不是搜索。 @mrR - 如果您“不确定”,为什么您认为世界需要知道您的想法?碰巧你错了,SQL Server 可以将&lt;&gt; 转换为两个范围搜索。【参考方案2】:
WHERE NULLIF(your_column, '') IS NOT NULL

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

WHERE your_column <> ''

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

WHERE your_column <> '' 
      AND your_column IS NOT NULL

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

【讨论】:

【参考方案3】:

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

COALESCE (fieldName, '') <> ''

【讨论】:

【参考方案4】:

一种索引友好的方式是:

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

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

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

【讨论】:

【参考方案5】:

只需检查:where value > '' -- 不为空且不为空

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

【讨论】:

【参考方案6】:

基本方式

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

【讨论】:

【参考方案7】:

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

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

这可能是包含 NVARCHAR 数据类型的单词 NULL 的字符串,而不是实际的 NULL。要查找这些字符串,您可以使用 = N'NULL',因为它们只是常规字符串!【参考方案9】:

以下语句对我有用。

$sql = "SELECT table_name FROM product_reviews WHERE title > '0'  
and  product='Product name'";

【讨论】:

以上是关于如何在 SQL Server 中检查 Is not Null 和 Is not Empty 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:查询应用在 where 子句中,包含 Json 对象的列上的 IS NOT Null 需要更多时间

SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)

NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: SQL Server

NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: SQL Server

nginx检查报错:nginx: [emerg] "server" directive is not allowed here in

SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)