将varchar转换为SQL Server 2012中的浮点时出错

时间:2019-03-19 02:35:54

标签: sql-server

我已将一个大型Excel电子表格导入到我的SQL Server数据库中,并且默认情况下所有列均为varchar数据类型。我的列(NULL列中也有sale个值。我想选择sale volume格式的float (double)作为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]

2 个答案:

答案 0 :(得分:0)

我对查询进行了如下修改,并且可以正常工作。

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]

答案 1 :(得分:0)

您可以尝试-修改查询。使用IsNull()函数来处理Null值。

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]

注意:上面的查询在为null的情况下将返回0.00,在为字符串的情况下将给出错误。使用下面的查询来处理字符串值,如果是字符串或为NULL,则下面的查询将返回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]