SQL Isnull 无效并且 returns 一个值,即使它是 space

SQL Isnull is not working and returns a value even if it is a space

我正在使用 SQL Server 2016 并且遇到了 isnull 函数的问题。该字段中的值是 space 但不断被选中,下面是我的代码:

SELECT * FROM table
WHERE  isnull (field1,'')<>''
       AND field1<>' '

如果我从 field1 复制粘贴,它是一个 space ' '。

谢谢

我已经尝试将所有可能的组合放入插入中..试试这个

Create table #t(Field1 varchar(100))
Insert into #t values 
(NULL), (' '), ('  '), ('a'),('')


select  field1 From #t
where LTRIM(RTRIM(field1)) <> ''

输出:

field1
---------
a

你的space不正常space(十六进制0x20,十进制32)

select ASCII(LEFT(field1, 1), * From table
where  isnull (field1,'')<>''

很可能是其中之一

  • 十进制换行 10
  • 回车return十进制13
  • 空小数 0
  • 硬space十进制160
  • tab 十进制 9(根据@SeanLange 对问题的评论)

正如我们通过评论和其他答案(尤其是 gbn 的答案)发现的,除了 space 之外,可能还有其他不可见的字符。

但这并没有为您提供如何编写查询的解决方案,查询可能类似于:

where field1 NOT IN (CHAR(0), CHAR(9), CHAR(10), CHAR(11), CHAR(12), CHAR(13), CHAR(14), CHAR(32), CHAR(160))

我找到了这个问题的解决方案:

SELECT ISNULL(NULLIF(field1,''), field2)