我们如何在SQL Server WHERE条件下检查列是否不为空,而不是空字符串(“)?
当前回答
只要检查:where值> "——不为空,不为空
-- 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
其他回答
WHERE NULLIF(your_column, '') IS NOT NULL
如今(4.5年过去了),为了让人类更容易阅读,我只会使用它
WHERE your_column <> ''
虽然有一种将null检查显式化的诱惑……
WHERE your_column <> ''
AND your_column IS NOT NULL
...正如@Martin Smith在接受的答案中所演示的那样,它实际上没有添加任何东西(而且我个人现在完全避免使用SQL空,所以它对我不适用!)
您可以使用其中任何一个来检查null,空白和空字符串。
WHERE COLUMN <> ''
WHERE LEN(COLUMN) > 0
WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
Coalesce将把null值折叠成默认值:
COALESCE (fieldName, '') <> ''
如果您只想将""匹配为空字符串
WHERE DATALENGTH(COLUMN) > 0
如果您想将完全由空格组成的字符串计算为空
WHERE COLUMN <> ''
当在WHERE子句中使用时,这两个函数都不会返回NULL值。As NULL将这些值计算为UNKNOWN而不是TRUE。
CREATE TABLE T
(
C VARCHAR(10)
);
INSERT INTO T
VALUES ('A'),
(''),
(' '),
(NULL);
SELECT *
FROM T
WHERE C <> ''
只返回单行a,即带有NULL或空字符串或完全由空格组成的字符串的行都将被此查询排除。
SQL小提琴
一种索引友好的方法是:
where (field is not null and field <> '')
如果没有很多行或者这个字段没有索引,你可以使用:
where isnull(field,'') <> ''
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的