【问题标题】:SQL error trying to convert varchar to decimal尝试将 varchar 转换为十进制的 SQL 错误
【发布时间】:2018-09-23 17:45:10
【问题描述】:

我试图弄清楚为什么会出现以下错误。为什么当我试图告诉它转换为小数时它试图转换为 int?

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

这里是业务端。如果我过滤掉时间段,它确实有效,但是当我将数据导入 Excel 时,我需要那个时间段。

convert(decimal(9,2),'"+$WorkSheet.Range('D13').Text.replace("'","").replace(" ","").replace("$","").replace(",","").replace("-","")+"'+0)

【问题讨论】:

    标签: sql excel


    【解决方案1】:

    大概是因为您使用的是+ 0,这意味着+被视为加法而不是串联。我认为简单的解决方案是替换:

    replace('convert(decimal(9,2), @val)',
            '@val',
            $WorkSheet.Range('D13').Text.replace("'", "").replace(" ", "").replace("$", "").replace(",", "").replace("-", "")
           )
    

    【讨论】:

    • 好的,谢谢你,我会努力的。我想这可能与它有关。 +0 的原因是如果 varchar 为空,它会抱怨,因为它也无法将其转换为小数。
    • @Zach。 . .您将需要其他逻辑。替换需要在将值放入 SQL 表达式之前进行,使用 coalesce()case 或其他等效项。
    • @Zach。 . .我不知道。这听起来像是一个 Excel/Powershell 问题。
    • 我的意思是stackoverflow。如果我使用 shift enter 将内容放在新行上,它不会在评论中显示为新行。
    • @Zach。 . .如果在一行的开头放置四个空格,它将被视为代码并尊重换行符。如果你换了两行,那么第二行开始一个新的段落。
    【解决方案2】:

    这就是我想出的。它看起来很粗糙,但似乎有效。测试将继续。再次感谢。

    convert(decimal(9,2), ISNULL(NULLIF('"+$WorkSheet.Range('D14').Text.replace("'","").replace(" ","").replace("$","").replace(",","").replace("-","")+"', ''),'0')),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2021-10-21
      相关资源
      最近更新 更多