SQL Server ISNULL函数将空字符串评估为零(0)

时间:2017-12-19 09:21:50

标签: sql-server

任何人都可以解释为什么以下查询正在评估to' null'即使分配给@Test = NULL的值并且在CASE中检查它是否为0

declare @Test varchar = NULL
    SELECT (CASE ISNULL(@Test, '')
            WHEN 0 THEN 'null'
            ELSE 'not null'
        END) as 'value'

这会返回' null'

declare @Test varchar = NULL
    SELECT (CASE ISNULL(@Test, '')
            WHEN '' THEN 'null'
            ELSE 'not null'
        END) as 'value'

这也会返回' null'

所以评估ISNULL(NULL,'')到''或0没有任何区别?

1 个答案:

答案 0 :(得分:1)

更好的方法来尝试如下

CASE WHEN  @Test IS NULL THEN 0  -- Type numeric
     ELSE '-'                 -- Type VARCHAR
     END AS outputvlaue

这会给你erro,因为你不能有两种返回类型,所以 尝试如下

CASE WHEN  @Test IS NULL THEN 0  -- Type numeric
     ELSE 123                 -- Type numeric
     END AS outputvlaue
上面的

将起作用

查询的输出是正确的ISNULL(@Test, '')表示当存在null时返回''值。

这两个查询都有效,因为例如,当您尝试这样的语句时

  SELECT (CASE ISNULL(@Test, '')
            WHEN 0 THEN 'null'
            ELSE 'not null'
        END) as 'value'

Isnull返回真值,因为你在case casement中给出的表达式求值为true,即ISNULL(@Test,'')及其真值..

所以你必须尝试这样

  SELECT CASE WHEN ISNULL(NULL,'') = '' 
     THEN 'a' 
     ELSE 'b' 
  END

将返回'a'