案例陈述返回'0'

时间:2017-08-18 18:18:56

标签: sql

如果值为null或-1,我需要此case语句返回空字符串,但实际上它返回0。 EmployeeCount是int,我假设需要将其转换为varchar,但我尝试过的任何内容似乎都没有。

CASE 
  WHEN EmployeeCount = -1 THEN ''
  WHEN EmployeeCount IS NULL THEN ''
  ELSE EmployeeCount
END

这不起作用:

CASE 
  WHEN EmployeeCount = -1 THEN ''
  WHEN EmployeeCount IS NULL THEN ''
  ELSE CAST(EmployeeCount as varchar(10))
END

2 个答案:

答案 0 :(得分:1)

我在SQL Server Management Studio中试过这个:

SELECT 
CASE 
  WHEN EmployeeCount = -1 THEN ''
  WHEN EmployeeCount IS NULL THEN ''
  ELSE CAST(EmployeeCount as varchar(10))
END
AS COL1
FROM 
(SELECT -1 as EmployeeCount) t

...它确实返回空字符串,而不是0,所以SQL没有任何问题,SQL之外的东西将它转换为0。

答案 1 :(得分:1)

case表达式返回单个类型。如果您有一些then子句评估为字符串而其他子句评估为数字,则数据库将确定结果是数字,而不是字符串。这就是你看到0的原因。这是''转换为数字时的样子。

解决方案很简单:cast()结果为字符串:

(CASE WHEN EmployeeCount = -1 OR EmployeeCount IS NULL THEN ''
      ELSE CAST(EmployeeCount as VARCHAR(32))
 END)