2
CASE WHEN Items.SerialNumber = -1 THEN Items.Aux1
ELSE Items.SerialNumber
END AS 'CheckNo'
这不起作用。我得到一个转换varchar到int错误。我很困惑,因为如果我将它作为where查询运行。我只是在案件陈述中发现错误,并不明白为什么。使用SQL获取转换错误Case语句
CASE WHEN Items.SerialNumber = -1 THEN Items.Aux1
ELSE Items.SerialNumber
END AS 'CheckNo'
这不起作用。我得到一个转换varchar到int错误。我很困惑,因为如果我将它作为where查询运行。我只是在案件陈述中发现错误,并不明白为什么。使用SQL获取转换错误Case语句
从MSDNcase statement
返回从 result_expressions类型的集合和可选else_result_expression最高优先级的类型。
INT
具有更高的优先级比所以varchar
所有表达时将被隐式转换为INT
。要了解更多有关数据类型优先check here
为了避免隐整数转换,转换的INT
到Varchar
在when
表达
SELECT CASE
WHEN Items.SerialNumber = -1 THEN Items.Aux1
ELSE Cast(Items.SerialNumber AS VARCHAR(100))
END AS 'CheckNo'
谢谢我结束了在SerialNumber上使用转换。我现在感觉超级慢。非常感谢您的帮助。 –
什么是'SerialNumber'的数据类型和'Aux1'列?你的'CASE'语句期望返回**一个**类型的数据。所以如果'SerialNumber'和'Aux1'是不同的数据类型,即'SerialNumber' ='varchar'和'Aux1' ='int',那么这就是你的问题。 –
这里涉及的列的类型是什么?你能否展示“工作”的例子? – David
你使用的是什么rdbms? –