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

时间:2019-01-15 19:24:26

标签: sql sql-server

我将一个csv文件上传到SQL Server,并且本应为IntDecimal的列只是varchar,并且我试图将16.50转换为{ {1}}或0.1656.40。我创建了一个新表,并尝试执行以下操作来转换数据:

0.064

我收到错误

  

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

2 个答案:

答案 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值直接转换为intint不是decimal)。根据标题“在SQL中将Varchar转换为十进制错误” ,这似乎是您的误解,尽管错误为“将varchar值16.50转换为数据类型时转换失败 int 。”

例如,下面的语句将失败:

SELECT CONVERT(int, '16.50');

相反,您需要先转换为小数,然后转换为int

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