Sql server SQL Server ISNULL函数将空字符串计算为零(0)
有人能解释一下为什么下面的查询将计算结果设为“null”,即使@Test=null的值被赋值,并且在CASE中它被检查为0Sql server SQL Server ISNULL函数将空字符串计算为零(0),sql-server,Sql Server,有人能解释一下为什么下面的查询将计算结果设为“null”,即使@Test=null的值被赋值,并且在CASE中它被检查为0 declare @Test varchar = NULL SELECT (CASE ISNULL(@Test, '') WHEN 0 THEN 'null' ELSE 'not null' END) as 'value' 这将返回“null” 及 这也会返回“null” 因此,将ISNULL(NULL
declare @Test varchar = NULL
SELECT (CASE ISNULL(@Test, '')
WHEN 0 THEN 'null'
ELSE 'not null'
END) as 'value'
这将返回“null”
及
这也会返回“null”
因此,将ISNULL(NULL、“”)计算为“”或0并没有任何区别?下面是更好的尝试方法
CASE WHEN @Test IS NULL THEN 0 -- Type numeric
ELSE '-' -- Type VARCHAR
END AS outputvlaue
CASE WHEN @Test IS NULL THEN 0 -- Type numeric
ELSE 123 -- Type numeric
END AS outputvlaue
这会给你错误,因为你不能有两个返回类型的情况下,所以
尝试如下
CASE WHEN @Test IS NULL THEN 0 -- Type numeric
ELSE '-' -- Type VARCHAR
END AS outputvlaue
CASE WHEN @Test IS NULL THEN 0 -- Type numeric
ELSE 123 -- Type numeric
END AS outputvlaue
以上方法将起作用
查询的输出是正确的
ISNULL(@Test',)
表示存在null时返回“”值
这两个查询都有效,因为当您这样尝试时,case..when语句
SELECT (CASE ISNULL(@Test, '')
WHEN 0 THEN 'null'
ELSE 'not null'
END) as 'value'
SELECT CASE WHEN ISNULL(NULL,'') = ''
THEN 'a'
ELSE 'b'
END
Isnull返回您的真值,就像您在case station计算为true时给出的表达式一样,它是Isnull(@Test“”)及其true
所以你必须这样尝试
SELECT (CASE ISNULL(@Test, '')
WHEN 0 THEN 'null'
ELSE 'not null'
END) as 'value'
SELECT CASE WHEN ISNULL(NULL,'') = ''
THEN 'a'
ELSE 'b'
END
将返回“a”在与0进行比较之前,您正在将@Test隐式转换为INT-这相当于转换时的
(@Test AS INT)=0
。要将'
与0
进行比较,服务器必须首先将其转换为INT,即转换为0。你想用这些代码做什么?为什么不使用适当的IS NULL
,即@Test为NULL时的情况,然后。。。其他的结束
?@PanagiotisKanavos感谢您的解释事实上我在一个项目中通过了一些旧的moules,我发现这个代码与问题的第一个条件类似。我想,为什么在计算“”时不将条件计算为false0@RajanPatel我希望这是你在模块中能找到的最小的蛇。不幸的是,这种蛇的第二个查询的companyput似乎是正确的。但是为什么它不返回“not null”,因为ISNULL(null,'')将返回“”,我们正在对照0检查它。@RajanPatel您的代码要求在检查之前将'
转换为0。为什么不使用IS NULL
?为什么要转换为''
然后转换为int?@RajanPatel-因为在第一种情况下,它与数值vlaue进行比较,这就是它工作的原因..您可以尝试第一种情况,例如当0时为null(@Test,1),然后为null,否则为notnull