Sql server 在SQL Server 2012中将varchar转换为float时出错

Sql server 在SQL Server 2012中将varchar转换为float时出错,sql-server,Sql Server,我已将一个大型Excel电子表格导入SQL Server数据库,默认情况下,所有列都是varchar数据类型。我的列sale列中也有空值。我想选择销售量作为双浮点数,它是varchar格式 我的查询如下,但我仍然得到一个转换错误 SELECT [CompanyCode] AS 'Company Code', [Sitecode] AS 'Site Code', [Product] AS 'Product Name', '' AS 'Tank ID', CO

我已将一个大型Excel电子表格导入SQL Server数据库,默认情况下,所有列都是varchar数据类型。我的列sale列中也有空值。我想选择销售量作为双浮点数,它是varchar格式

我的查询如下,但我仍然得到一个转换错误

SELECT
    [CompanyCode] AS 'Company Code',
    [Sitecode] AS 'Site Code',
    [Product] AS 'Product Name',
    '' AS 'Tank ID',
    CONVERT(DATE, [InvDay]) AS Date,
    CAST([Sales] AS DECIMAL) AS 'Sale Volume',
    '' AS 'Record ID'
FROM
    [dbo].[2019-01]

我已经修改了我的查询,如下所示,它是有效的

select 
        [CompanyCode] as 'Company Code',
        [Sitecode] as 'Site Code',
        [Product] as 'Product Name',
        '' as 'Tank ID',
        CONVERT(date, [InvDay]) as  Date,

        SaleV=(CASE
                    WHEN [Sales] ='NULL' THEN 0
                     WHEN [Sales] = '' then 0
                    ELSE
                     CONVERT(decimal(10,4) ,[Sales] )
                     END)


    FROM [dbo].[2018-01]

您可以尝试此方法-修改您的查询。使用IsNull函数处理空值

select 
        [CompanyCode] as 'Company Code',
        [Sitecode] as 'Site Code',
        [Product] as 'Product Name',
        '' as 'Tank ID',
        CONVERT(date, [InvDay]) as  Date,
        CAST(ISNULL([Sales],0) as decimal(10,2)) as 'Sale Volume',
        '' as 'Record ID'
From [dbo].[2019-01]
注意:如果为空,上述查询将返回0.00,如果为字符串,则返回错误。要处理字符串值,请使用下面的查询,如果字符串为空,下面的查询将返回0.00,否则将转换为十进制

select 
        [CompanyCode] as 'Company Code',
        [Sitecode] as 'Site Code',
        [Product] as 'Product Name',
        '' as 'Tank ID',
        CONVERT(date, [InvDay]) as  Date,
        ISNULL(TRY_CAST([Sales] as decimal(10,2)), 0) as 'Sale Volume',
        '' as 'Record ID'
From [dbo].[2019-01]

您确定所有值都是十进制格式的吗?要克服此错误,请尝试使用try_cast并给出十进制精度,例如try_cast[Sales]为十进制10,5,以避免丢失任何十进制值,try_cast将通过将其转换为nulls@Avi谢谢,我提供了更新后的查询作为答案。try\u cast将在没有案例陈述的情况下执行相同/类似的操作