【问题标题】:Conversion failed when converting the varchar value '"...."' to data type int将 varchar 值 '"...."' 转换为数据类型 int 时转换失败
【发布时间】:2016-09-07 04:26:31
【问题描述】:
SELECT 
    tMI.MI
FROM
    tMI
LEFT JOIN 
    tCard ON tCard.CardNumber = tMI.MI
INNER JOIN
    TMIN on TMIN.T_ID = tMI.MI
WHERE
    tCard.CardNumber IS NULL
    AND tMI.MI IS NOT NULL

我正在运行上面的代码,没有内部连接它运行良好。但是一旦我添加了内部连接,它就会说它无法转换。

数据是相同的,但可能在表格中到处都有一些额外内容。

有什么办法可以解决这个错误吗?

【问题讨论】:

  • 您应该发布您的表结构、示例数据和预期结果。照原样,您的错误表明t_id 和mi 是不同的数据类型(您不能简单地加入int 和varchar)...
  • 检查 TMIN.T_ID 和 tMI.MI 列的数据类型。其中一个很可能是 varchar (tMI.MI),另一个是 int (TMIN.T_ID)。我建议, Cast 或 Convert 其中一个进行比较。
  • 我有完全相同的问题,除了我知道两个表列都是 int

标签: sql sql-server


【解决方案1】:

检查您的 ON 条件中提到的所有列是否具有相同的数据类型。

如果您将 CardNumber 存储为 varchar(实际上是一个 integer 值)并将 Mi 存储为整数,请尝试修改您的 on 条件,如下所示。

 ON CAST (tCard.CardNumber as INT) = tMI.MI

【讨论】:

    【解决方案2】:

    我认为你的两个表列是不同的数据类型,所以你使用以下 sql中的cast函数,如

    SELECT 
        cast(tMI.MI as varchar)  as MI
    FROM
        tMI
    LEFT JOIN 
        tCard ON tCard.CardNumber = tMI.MI
    INNER JOIN
        TMIN on TMIN.T_ID = tMI.MI
    WHERE
        tCard.CardNumber IS NULL
        AND tMI.MI IS NOT NULL
    

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多