如果值为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
答案 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)