将varchar值'6276.54'转换为数据类型int

时间:2019-12-04 14:03:31

标签: sql sql-server

我有以下查询,不断引发转换错误。我已经尝试了很多方法来完成这项工作,但仍然遇到相同的错误。消除过程我现在想这与硬编码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

任何帮助将不胜感激。

预先感谢

2 个答案:

答案 0 :(得分:1)

您有一些逻辑上的后题,您需要先try_parse,然后再执行nullif。如果try_parse无法转换为指定的类型,则通常返回null。然后,您需要将null转换为0.0

  

coalesce(sum(premium)/(sum(nullif(try_convert(float,'userId),0.0))* 0.715),0.0)AS'profit'

此外,如果期望浮点数或小数,则将0.0设置为零

提示:避免您和他人的视线,无需使用大写字母。那是70年代的

答案 1 :(得分:0)

如前所述,该列中可能包含一些非数字数据。我尽了最大的努力,可以从这里收集到的信息进行快速的模拟,对于输入的数据似乎很有效。只是测试您似乎遇到问题的代码行。

USE DB
GO
CREATE TABLE 
Test_Table (
Premium decimal,
userID varchar(20)
)

INSERT INTO 
Test_Table VALUES
(
2.5, 1
)

USE DB
GO
SELECT COALESCE(SUM(Premium)/(SUM(try_convert(float,NULLIF(userID,0)))*0.715),0) AS 'PROFIT'
FROM Test_Table;

这可能是某些非数字数据或另一行代码引起的问题。不过,我知道我们的数据和数据类型可能并不完全相同。