CASE语句因数据转换错误

时间:2015-09-01 15:33:36

标签: sql tsql

我有一个整数列,我需要添加一个case语句以显示在报表中。如果该int列= -1,则该列中的数据应为DOWN,否则为int值/ 100

如果我尝试下面的话

CASE WHEN LOADVALUE = -1 then 'DOWN'

ELSE LOADVALUE/100 END 

正如预期的那样,我收到一个错误:将varchar转换为int时出错。请帮忙。

2 个答案:

答案 0 :(得分:3)

您需要将ELSE结果转换为VARCHAR

CASE WHEN LOADVALUE = -1 THEN 'DOWN'
ELSE CONVERT(VARCHAR (10), LOADVALUE/100) END

您应该记住的一点是,由于LOADVALUE的数据类型是INT,因整数除法可能会得到意外的结果。您可能需要考虑使用它:

CASE WHEN LOADVALUE = -1 THEN 'DOWN'
ELSE CONVERT(VARCHAR (10), (LOADVALUE * 1.0)/100.0) END

这会将LOADVALUE转换为小数以正确进行除法 (如果你真的想要整数除法,请忽略这个替代方案)

答案 1 :(得分:2)

当您使用case时,when子句和else子句中的数据类型是一致的。

CASE WHEN LOADVALUE = -1 then 'DOWN'
ELSE cast(LOADVALUE/100 as varchar) END