2014-09-02 164 views
0

我正在处理类型为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' 

我想知道如果我错了地方?

+0

什么领域,cd.ConsDetQty,q.Quantity和q2.Quantity的数据类型? – mxix 2014-09-02 14:16:27

回答

0

你的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.ConsDetQtyq.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 
+0

我不想将它转换为整数 – DoIt 2014-09-02 14:59:25

+0

然后删除最后一个'cast()'。 SQL Server执行整数除法,所以它看起来像你想在结果中的整数。 – 2014-09-02 15:00:28

+0

它给我一个算术溢出错误,将varchar转换为数字 – DoIt 2014-09-02 15:06:38

0

试试这个

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' 
相关问题