首页 > 解决方案 > 将 varchar 值“6276.54”转换为数据类型 int 时转换失败

问题描述

我有以下查询,不断抛出转换错误。我已经尝试了很多方法来完成这项工作,但仍然遇到同样的错误。消除过程我现在认为这与硬编码的 0.715 值有关。我不确定是否或如何强制将其设为小数,或者在我的代码开头使用此 SET 和变量是否更好。

SELECT  CAST(DATEPART(yyyy, YEAR) as INT) AS YEAR, 
        COUNT(ID) AS ID,
        SUM(VALUE) AS VALUE,
        SUM(PREMIUM) AS PREMIUM,
        SUM(try_convert(float,USERID1)) AS VALUE1,
        COALESCE(SUM(PREMIUM)/(SUM(try_convert(float,NULLIF(USERID1,0)))*0.715),0) AS 'PROFIT'
        SUM(CAST(USERID1 AS float))/SUM(PREMIUM) AS 'PROFIT%'

INTO #YEAR_VALUE

FROM #DATA LT

INNER JOIN dbo.AccountDB P ON LT.ID = P.ID

GROUP BY INCEPTDATE

任何帮助将不胜感激。

提前致谢

标签: sqlsql-server

解决方案


你有一些逻辑回到前面,你需要先try_parse,然后再做nullif。如果 Try_parse 不能强制转换为指定的类型,它通常会返回 null。然后您需要将 null 转换为 0.0

合并(总和(溢价)/(总和(nullif(try_convert(浮点数,'userId),0.0))* 0.715),0.0)作为'利润'

此外,如果期望浮点数或小数,则使用 0.0 表示零

提示:保存你和下一个人的眼睛,不需要使用大写。那是70年代的事了


推荐阅读