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)
我正在使用 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)