我将一个csv文件上传到SQL Server,并且本应为Int
或Decimal
的列只是varchar
,并且我试图将16.50
转换为{ {1}}或0.165
至6.40
。我创建了一个新表,并尝试执行以下操作来转换数据:
0.064
我收到错误
“将varchar值16.50转换为int数据类型时,转换失败。
答案 0 :(得分:1)
您需要在除法之前进行转换,或使用100.0
。因为100是整数,所以它试图转换为INTEGER
。
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
否则,您将需要TRY_CONVERT
或类似的内容。
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
答案 1 :(得分:0)
您不能将表示小数的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'));