在SQL中将Varchar转换为十进制错误

在SQL中将Varchar转换为十进制错误,sql,sql-server,Sql,Sql Server,我将一个csv文件上传到SQL Server中,本来应该是Int或Decimal的列只是varchar,我正在尝试将16.50转换为0.165或6.40转换为0.064。我创建了一个新表,并尝试通过以下方式转换数据: alter table bplateinfo2018 add [New O Swing Percentage] as decimal(5,4) update bplateinfo2018 Set [New O Swing Percentage] = [Origina

我将一个csv文件上传到SQL Server中,本来应该是
Int
Decimal
的列只是
varchar
,我正在尝试将
16.50
转换为
0.165
6.40
转换为
0.064
。我创建了一个新表,并尝试通过以下方式转换数据:

alter table bplateinfo2018
  add [New O Swing Percentage] as decimal(5,4) 

  update bplateinfo2018
  Set [New O Swing Percentage] = [Original O Swing Percentage] / 100
我得到了错误

“将varchar值16.50转换为int数据类型时,转换失败


您需要在除法之前转换它,或者使用
100.0
。它正在尝试转换为
INTEGER
,因为100是一个整数

select '16.50' / 100.0
select try_convert(decimal(4,2),'16.50') / 100
如果您知道所有
varchar
值都可以隐式转换为十进制,那么只需:

update bplateinfo2018
  Set [New O Swing Percentage] = [Original O Swing Percentage] / 100.0
否则,您将需要或类似的东西

update bplateinfo2018
  Set [New O Swing Percentage] = [Original O Swing Percentage] / 100.0
  where try_convert(decimal(16,4),[Original O Swing Percentage]) is not null

您不能将表示十进制的
varchar
值直接转换为
int
int
不是
decimal
)。这似乎是您在这里的误解,基于您的标题“将SQL中的varchar转换为十进制错误”,尽管错误为“将varchar值16.50转换为数据类型int时,转换失败

例如,以下语句将失败:

SELECT CONVERT(int, '16.50');
相反,您需要先转换为十进制,然后再转换为
int

SELECT CONVERT(int,CONVERT(decimal(4,2),'16.50'));

这是一个精确的副本,所以它是@Sami。我将结束此主题。