将varchar值645.00转换为数据类型int时出现转换失败int
问题描述:
我正在处理类型为decimal(18,4)
的列上执行某种除法操作的SQL查询,并且应该返回值为decimal
但由于某些原因,它是给我一个错误将varchar值645.00转换为数据类型int时出现转换失败int
Conversion failed when converting the varchar value 645.00 to data type int
我不做任何转换的值,但我不知道为什么这是试图将其转换为int。
我的查询部分如下
CASE WHEN co.RequestID IS NOT NULL THEN cd.ConsDetQty/1000 WHEN nis.[867_key] IS NOT NULL
THEN q.Quantity/1000 ELSE q2.Quantity/1000 END AS 'Quantity'
我想知道如果我错了地方?
答
你的case语句是:
(CASE WHEN co.RequestID IS NOT NULL
THEN cd.ConsDetQty/1000
WHEN nis.[867_key] IS NOT NULL
THEN q.Quantity/1000
ELSE q2.Quantity/1000
END) AS Quantity
为使该代码生成这样的错误,cd.ConsDetQty
,q.Quantity
,或q2.Quantity
存储为一个字符串,而不是一个数字。您应该修复该列,但可以通过执行快速修复查询:
(CASE WHEN co.RequestID IS NOT NULL
THEN cd.ConsDetQty/1000.0
WHEN nis.[867_key] IS NOT NULL
THEN q.Quantity/1000.0
ELSE q2.Quantity/1000.0
END) AS Quantity
这是一个“快速和肮脏”的修复程序。我不建议在实际代码中进行隐式转换。更好地做到:
(CASE WHEN co.RequestID IS NOT NULL
THEN cast(cd.ConsDetQty as float)/1000.0
WHEN nis.[867_key] IS NOT NULL
THEN cast(q.Quantity as float)/1000.0
ELSE cast(q2.Quantity as float)/1000.0
END) AS Quantity
答
试试这个
CASE WHEN co.RequestID IS NOT NULL THEN CONVERT(DECIMAL(18,4),cd.ConsDetQty)/1000
WHEN nis.[867_key] IS NOT NULL THEN CONVERT(DECIMIAL(18,4),q.Quantity/1000
ELSE CONVERT(DECIMAL(18,4),q2.Quantity)/1000
END AS 'Quantity'
什么领域,cd.ConsDetQty,q.Quantity和q2.Quantity的数据类型? – mxix 2014-09-02 14:16:27