【问题标题】:Unable to convert varchar to int in sql无法在sql中将varchar转换为int
【发布时间】:2020-09-24 17:49:36
【问题描述】:

我正在尝试执行一个查询,我可以将 varchar 转换为 INT 列以执行计算,但是,我一直收到此错误

将 varchar 值 '83640.00' 转换为数据类型 int 时转换失败

当我从查询中排除这个值时,它只会显示与表中的下一个值相同的错误消息

将 varchar 值 '57800.00' 转换为数据类型 int 时转换失败

我试图执行的计算只是列* 100 (Net_Value_NETWR * 100)Net_Value_NETWR 当前定义为 varchar 数据类型。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    '57800.00' 是代表decimalvarchar,而不是int。您不能将代表decimalvarchar 直接转换为int,您必须将其转换两次:

    SELECT CONVERT(int,CONVERT(decimal(7,2),'57800.00'));
    

    【讨论】:

      【解决方案2】:

      不要将数字存储在字符串中!规范的解决方案是使用try_convert()。但你实际上想要这个价值。所以,转换成小数,比如:

      select convert(decimal(10), Net_Value_NETWR)
      

      或任何列错误地将数字存储在字符串中。

      转换为decimal 回避了这个问题。 decimal(10) 足够大,可以存储一个整数,但它也允许使用小数位。

      【讨论】:

        【解决方案3】:

        这里的值是十进制的,如果你将十进制值转换为整数,那么你将改变你必须在小数点后留下值或四舍五入。

        一旦你将“1234”字符串转换为整数,它就可以正常工作了。

        现在由你决定使用什么函数 FLOOR() 或 CEILING()

        CAST(FLOOR(yourField) as int), CAST(CEILING(yourField) as int)
        

        CEILING 将 deciaml 之前的值加一, floor 将返回小数点前的精确值,在这两种情况下,小数点后的值都将被删除。

        现在您只有整数值,然后您可以转换为整数而不会出现任何错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-27
          • 2013-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-26
          • 2014-07-24
          相关资源
          最近更新 更多