在SQL中将Varchar转换为十进制错误
我将一个csv文件上传到SQL Server中,本来应该是在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
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。我将结束此主题。