sql - 错误 "Conversion failed when converting the varchar value ' ABC' 到数据类型 int。”

标签 sql sql-server

需要一些帮助来解决我在 SQL Server 中遇到的错误。我在“UserCode”列中搜索的查询中有以下几行,然后根据这些代码对“Amount”列求和。但是,在用户代码列中,有一些变量,例如“ABC”,而不是所有整数。这会导致错误“将 varchar 值‘ABC’转换为数据类型 int 时转换失败。我尝试搜索但找不到解决方法。谁能建议克服此错误的最佳方法是什么?

SUM((CASE WHEN (ec.UserCode >= 100 AND ec.UserCode <= 200) 
          THEN e.Amount 
          ELSE '0' 
     END)
   ) AS 'ColumnName'

谢谢!

最佳答案

else 返回一个字符串,所以这是一个问题。只有当 e.Amount 存储为字符串时才会导致另一个问题 -- 恐怖的恐怖,没有存储具有正确类型的值。

因此,如果那是导致问题的代码,我建议:

SUM(CASE WHEN ec.UserCode >= 100 AND ec.UserCode <= 200
         THEN TRY_CONVERT(?, e.Amount)
         ELSE 0
    END) AS ColumnName

? 是适当类型的占位符,可能是 intbigintdecimal(20, 4) 或类似的东西。

需要注意的是:如果UserCode 是一个字符串,也可能导致错误。为此,使用字符串比较:

SUM(CASE WHEN ec.UserCode >= '100' AND ec.UserCode <= '200'
         THEN TRY_CONVERT(?, e.Amount)
         ELSE 0
    END) AS ColumnName

或者,如果您愿意,可以在 try_convert() 那里:

SUM(CASE WHEN TRY_CONVERT(int, ec.UserCode) >= 100 AND
              TRY_CONVERT(int, ec.UserCode <= 200
         THEN TRY_CONVERT(?, e.Amount)
         ELSE 0
    END) AS ColumnName

关于sql - 错误 "Conversion failed when converting the varchar value ' ABC' 到数据类型 int。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59933973/

相关文章:

c# - MySQL 跳过空字符串查询?

sql - 在 R 脚本中使用 R 变量的 where 子句以在 SQL 语句中使用它

mysql - 数据库如何在 B-Tree/B+Tree 内部存储数据

mysql - 结果差异(MySQL 5.7 与 MySQL 8.0)

sql - Oracle SQL 中的 MAX() OVER PARTITION BY

sql - 我需要从 sql 中选择一个具有不同值的列

sql - 无法连接到 (LocalDB)\MSSQLLocalDB -> 用户 'User-PC\User' 登录失败

asp.net - asp.net和sqlserver 2005的分页设计推荐

mysql - 如何从 SQL 中的临时表 (#temp1) 生成脚本

mysql - SQL 查询 Ailas 问题