将Varchar转换为Float MS SQL

时间:2019-04-16 11:04:53

标签: sql-server

我正在尝试将从varchar继承的一些数据转换为float:

SELECT CAST([Column 8] AS Int)    FROM [Sean].[dbo].[ResApr2019]

我收到此错误:

  
    

将varchar值'14,714.000'转换为数据类型int时,消息245,级别16,状态1,第2行转换失败。

  

有什么想法可以解决这个问题吗?

谢谢

5 个答案:

答案 0 :(得分:4)

从文本中删除',',尝试将其转换为十进制,然后转换为整数值。

SELECT CONVERT(decimal(11,0), REPLACE('14,714.000', ',', ''))

以您的情况

SELECT CONVERT(decimal(11,0),REPLACE([Column 8],',','')) FROM [Sean].[dbo].[ResApr2019]

OR

 SELECT CONVERT(float,REPLACE([Column 8],',','')) FROM [Sean].[dbo].[ResApr2019]

答案 1 :(得分:1)

您需要修复您的数据类型。 varchar不是数字数据类型,不应用于存储数字值。这就是为什么出现错误的原因,因为数值数据类型不包含逗号。您可以使用以下语句来修复表(假设它们全部为%,0.000格式):

USE Sean;
GO
UPDATE TABLE dbo.ResApr2019
SET [LENGTH] = REPLACE([Column 8],',','');
ALTER TABLE A ALTER COLUMN [Column 8] int; --Other datatype with a scale/precision may be appropriate (like decimal)

然后,您可以运行查询而无需CAST

SELECT [Column 8]
FROM [Sean].[dbo].[ResApr2019];

答案 2 :(得分:1)

使用Money数据类型代替floatmoney将处理逗号分隔的数字。

select cast([Column 8] as money) from [sean].[dbo].[ResApr2019]

答案 3 :(得分:0)

您的代码由于字符串中的逗号和点而失败。您想在转换为INT之前消除这些字符

 DECLARE @A VARCHAR(10) = '14,714.000'

DECLARE @B VARCHAR(20)
SET @B = REPLACE(REPLACE(@A, ',', ''), '.', '')

SELECT CAST(@A AS INT)--This code fails
SELECT CAST(@B AS INT)--This code works well

在您的情况下:

SELECT CAST(REPLACE(REPLACE([Column 8],',',''),'.','') AS Int)    FROM [Sean].[dbo].[ResApr2019]

答案 4 :(得分:0)

问题似乎是varchar值中的逗号。通过在进行转换或转换之前将其剥离,可以解决该问题。您是否有机会从另一台服务器上的备份本地还原此数据库?可能是本地计算机上的“区域”设置与服务器上的区域设置不同的情况。

declare @test varchar(50) = replace('14,714.000 ', ',', '');
select @test;
select cast(@test as float)
select convert(float, @test)
相关问题