代码之家  ›  专栏  ›  技术社区  ›  HasanG Joe Dabones

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

  •  2
  • HasanG Joe Dabones  · 技术社区  · 14 年前

    我有表类别(C)和另一个表(X),其中一列可以包含cat id,用逗号分隔为varchar数据类型。我想选择相关类别,但在尝试选择以下类别时出现错误:“将varchar值“5”转换为数据类型int时转换失败:

    SELECT ID, Title FROM c WHERE ID IN (SELECT catIDs FROM x WHERE ID=any);
    

    子查询返回类似“1,3,4”的数据。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Community gview    7 年前

    你需要分开 1,3,4 子查询返回的字符串分隔为 int 价值观。SQL Server没有内置函数,但可以使用 this user-defined function .

    创建函数 dbo.Split 在数据库中,然后按如下方式重新编写查询:

    SELECT ID, Title
    FROM c
    WHERE ID IN
      (
        SELECT s
        FROM dbo.Split(',', '1,3,4')
      )
    

    我用示例结果替换了子查询 1,3 缩短查询并使其更容易理解。

        2
  •  1
  •   Alexis Dufrenoy    14 年前

    如果我理解正确,您的列catid中实际上有类似“1,3,4”的值。所以您应该在子查询的选择中提取一个子字符串。

    顺便说一下,我不是MS SQL Server专家,但这样做可能是一个糟糕的数据库设计。我不确定RDBMS引擎在这种情况下会使用索引…