In子句在将字符串值传递给整数列时给出错误

时间:2013-06-24 13:01:22

标签: sql sql-server-2012

我的查询如下

select * from table1 where id in (select ids from table2 where id = 100)

如果我单独运行,子查询会返回34,35,55,66之类的输出。

但我的上述查询错误为

Conversion failed when converting the varchar value '34,35,55,56' to data type int.

table1中的id列是int。我知道我可以在2个单独的查询中执行此操作,但如果在单个查询中有任何方法可以做,请告诉我。 非常感谢提前

1 个答案:

答案 0 :(得分:1)

我不知道sql server和关于这种结构的评论是不可取的,你可以在mysql中使用以下this fiddle进行以下操作。

select distinct id from table1 join table2 on find_in_set(id,ids)

更新:我刚刚意识到这并不反映table2拥有自己的id字段并基于此限制搜索。如果你需要帮助修改查询以容纳我,我会更新它和小提琴。

更新2:根据fiddle,这是一个蹩脚但可能有效的尝试在SQL Server中使用其更有限的字符串工具。如果有人知道SQL Server的更简单的find_in_set等价物,我很想知道它是什么。

select distinct id from table1 join table2 
  on patindex('%,'+cast(id as varchar)+',%',ids)>0 or
  patindex(cast(id as varchar)+',%',ids)>0 or
  patindex('%,'+cast(id as varchar),ids)>0 or
  patindex(cast(id as varchar),ids)>0