如何在 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, '') <> ''
?
因为如果column
有索引,那么你的查询很可能不会用到它
我不确定,但如果你写 WHERE COL'' 这将可能进行表扫描而不是搜索。
@mrR - 如果您“不确定”,为什么您认为世界需要知道您的想法?碰巧你错了,SQL Server 可以将<>
转换为两个范围搜索。【参考方案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性能分析(十八)