【问题标题】:Converting Varchar to Decimal Error in SQL [duplicate]在 SQL 中将 Varchar 转换为十进制错误 [重复]
【发布时间】:2019-01-16 03:32:02
【问题描述】:

我将一个 csv 文件上传到 SQL Server 和应该是 IntDecimal 的列只是 varchar 并且我正在尝试将 16.50 转换为 0.1656.40 到 @ 987654327@。我创建了一个新表并尝试这样做转换数据:

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 时转换失败。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您需要在除法之前将其转换,或使用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
    

    否则,您将需要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
    

    【讨论】:

      【解决方案2】:

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

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

      SELECT CONVERT(int, '16.50');
      

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

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

      【讨论】:

      • 完全一样
      • 原来是@Sami。我会关闭这个话题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 2012-08-11
      • 2013-04-18
      相关资源
      最近更新 更多