首页 > 解决方案 > 如何在 SQL Server 中将 varchar 转换为浮点数?我收到一个错误

问题描述

我正在尝试将临时表 ( AmazonSales_temp) 中的数据插入到我的主表 ( AmazonSales) 中。临时表的所有列都是 type varchar。主表有一些floatvarchar值。我正在尝试使用存储过程插入。

当我执行存储过程时,我得到一个错误:

消息 8114,级别 16,状态 5,过程 usp_LoadAmazonSales,第 16 行 [批处理开始第 2 行]
将数据类型 varchar 转换为浮点数时出错

我尝试了所有可能的方法。知道如何解决这个问题吗?需要帮忙。

INSERT INTO AmazonSales
    SELECT
        [ProductTitle],
        CAST(Revenue AS FLOAT),
        CAST(RevenueTotal AS FLOAT),
        CAST(RevenuePriorPeriod AS FLOAT),
        CAST(RevenueLastYear AS FLOAT)
    FROM 
        AmazonSales_temp

标签: sql-server

解决方案


您的语法建议使用 SQL Server。您可以使用以下方法消除错误TRY_CAST()

insert into AmazonSales
    SELECT [ProductTitle],
           TRY_CAST(Revenue AS FLOAT),
           TRY_CAST(RevenueTotal AS FLOAT),
           TRY_CAST(RevenuePriorPeriod AS FLOAT),
           TRY_CAST(RevenueLastYear AS FLOAT)    
    FROM  AmazonSales_temp;

也就是说,这只会掩盖错误。它插入NULL值。你需要找出问题所在。为此,运行这样的查询来查找有问题的记录:

SELET a.*
FROM AmazonSales_temp a
WHERE TRY_CAST(Revenue AS FLOAT) IS NULL AND Revenue IS NOT NULL;

我还建议您不要使用FLOAT货币价值。这些更好地表示为DECIMAL/ NUMERIC


推荐阅读