SQL Isnull不起作用,即使它是一个空格也返回一个值

时间:2017-08-02 12:57:24

标签: sql sql-server sql-server-2016

我正在使用SQL Server 2016并遇到了isnull函数的问题。该字段中的值是一个空格但仍然被选中,下面是我的代码:

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

如果我从field1复制并粘贴,则它是一个空格&#39; &#39;

由于

4 个答案:

答案 0 :(得分:6)

您的空间不是正常空间(十六进制0x20,十进制32)

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

很可能是

之一
  • 换行十进制10
  • 回车小数13
  • 空小数0
  • 硬空格十进制160
  • tab decimal 9(根据来自@SeanLange的问题的评论)

答案 1 :(得分:0)

我试图将所有可能的组合插入到插入中..试试这个

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


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

输出:

field1
---------
a

答案 2 :(得分:0)

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

但是,这并没有为您提供如何编写查询的解决方案,例如:

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

答案 3 :(得分:0)

我发现此问题的解决方案是:

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