Sql server 在SQL Server 2012中将varchar转换为float时出错
我已将一个大型Excel电子表格导入SQL Server数据库,默认情况下,所有列都是varchar数据类型。我的列sale列中也有空值。我想选择销售量作为双浮点数,它是varchar格式 我的查询如下,但我仍然得到一个转换错误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
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将在没有案例陈述的情况下执行相同/类似的操作