2016-03-01 30 views
2
CASE WHEN Items.SerialNumber = -1 THEN Items.Aux1 
ELSE Items.SerialNumber 
END AS 'CheckNo' 

这不起作用。我得到一个转换varchar到int错误。我很困惑,因为如果我将它作为where查询运行。我只是在案件陈述中发现错误,并不明白为什么。使用SQL获取转换错误Case语句

+5

什么是'SerialNumber'的数据类型和'Aux1'列?你的'CASE'语句期望返回**一个**类型的数据。所以如果'SerialNumber'和'Aux1'是不同的数据类型,即'SerialNumber' ='varchar'和'Aux1' ='int',那么这就是你的问题。 –

+0

这里涉及的列的类型是什么?你能否展示“工作”的例子? – David

+3

你使用的是什么rdbms? –

回答

7

MSDNcase statement

返回从 result_expressions类型的集合和可选else_result_expression最高优先级的类型。

INT具有更高的优先级比所以varchar所有表达时将被隐式转换为INT。要了解更多有关数据类型优先check here

为了避免整数转换,转换的INTVarcharwhen表达

SELECT CASE 
     WHEN Items.SerialNumber = -1 THEN Items.Aux1 
     ELSE Cast(Items.SerialNumber AS VARCHAR(100)) 
     END AS 'CheckNo' 
+0

谢谢我结束了在SerialNumber上使用转换。我现在感觉超级慢。非常感谢您的帮助。 –