【发布时间】:2012-01-29 10:04:03
【问题描述】:
我们如何在 SQL Server WHERE 条件中检查列是否不为空且不是空字符串 ('')?
【问题讨论】:
标签: sql sql-server
我们如何在 SQL Server WHERE 条件中检查列是否不为空且不是空字符串 ('')?
【问题讨论】:
标签: sql sql-server
如果只想匹配""为空字符串
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 或空字符串或完全由空格组成的字符串的行都被此查询排除在外。
【讨论】:
WHERE COALESCE(column, '') <> ''?
column有索引,那么你的查询很可能不会用到它
<> 转换为两个范围搜索。
WHERE NULLIF(your_column, '') IS NOT NULL
现在(4.5 年后),为了让人类更容易阅读,我会使用
WHERE your_column <> ''
虽然有明确的空检查的诱惑......
WHERE your_column <> ''
AND your_column IS NOT NULL
...正如@Martin Smith 在接受的答案中所展示的那样,它并没有真正添加任何东西(我个人现在完全避开 SQL 空值,所以它无论如何都不适用于我!)。
【讨论】:
Coalesce 会将空值折叠成默认值:
COALESCE (fieldName, '') <> ''
【讨论】:
一种索引友好的方式是:
where (field is not null and field <> '')
如果行数不多或该字段未编入索引,则可以使用:
where isnull(field,'') <> ''
【讨论】:
只需检查: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
【讨论】:
基本方式
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
【讨论】:
您可以使用其中任何一种来检查 null、空格和空字符串。
WHERE COLUMN <> ''
WHERE LEN(COLUMN) > 0
WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
【讨论】:
由于某种原因,我的 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',因为它们只是常规字符串!
以下语句对我有用。
$sql = "SELECT table_name FROM product_reviews WHERE title > '0'
and product='Product name'";
【讨论】: