sql - 将 varchar 值 '1,' 转换为数据类型 int 时转换失败

标签 sql sql-server sql-server-2005 t-sql

我有表类别 (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”的数据

最佳答案

您需要将子查询返回的 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,4 替换了子查询,以缩短查询并使其更易于理解。

关于sql - 将 varchar 值 '1,' 转换为数据类型 int 时转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290961/

相关文章:

sql-server - 安装 SQL Server Management Studio Express 后出现 "Cannot open user default database. Login failed."

sql-server - SQL Server 存储过程初学者指南

asp.net - 有任何 SQL Server 多记录集存储过程陷阱吗?

sql - 使用数据作为外键删除具有其他表的 SQL 中的多个条目

sql - 我可以通过给出 regexp_substr 的查询来创建选择组吗?

sql - 从 select 语句中的 SUM 返回前 5 个

SQL Server - 如何向登录名授予对所有数据库的读取访问权限?

sql - Postgres 在指定时间触发

sql - SELECT MIN Date(使用WINDOW函数)和MAX Date(使用JOIN相关字段)一起

sql - 使用 DATEADD 和 DATEDIFF 获取一周的开始日(星期一)时出现问题