2014-01-14 23 views
1

让我解释一下......我有一个表,它有一列包含一个需要用来从另一个表返回数据的分隔列表。 (不要问,我没有设计这个!)。 EG:将从列返回的字符串拆分为整数

Set @DelimitedList = (Select stupid_column from Table_One) 

这会导致@DelimitedList包含'1,2,3';然后我想在“去哪儿”子句中使用这个用于后续查询......即

Select * from Table_Two where int_column in (@DelimitedList) 

可悲的是作为SQL试图@DelimitedList其转换到失败的整数,这并不工作。 有没有什么方法可以将我的字符串列表“转换”或“转换”为整数数组?

提前

+2

您使用的是什么RDBMS? – valex

+0

可能重复的[Split in SQL](http://stackoverflow.com/questions/2647/split-string-in-sql) –

+0

这是MS-SQL吗?你可以用两个语句在应用程序层中完成它吗? – Jodrell

回答

0

这可以以下方式进行: 更换

WHERE int_column in (@DelimitedList) 

WHERE ','[email protected]+',' LIKE '%,'+CAST(int_column AS Varchar(10))+',%' 

此外,它可以取决于你的RDBMS。例如在MySQL中,您可以使用FIND_IN_SET()函数。

+0

谢谢Valex;这就像一个魅力。 – Nibbo

2

非常感谢使用动态SQL,这我并不推荐,你可以做如下:

EXEC ('Select * from Table_Two where int_column in (' + @DelimitedList + ')') 

你可以找到更多信息,here

+0

感谢Thejaka,这确实有用,但我认为我更喜欢valex的版本。我确实尝试过EXEC,但弄错了,所以你的解决方案已经清除了我如何做到这一点,并将在未来有用。 – Nibbo