我有字符串,我必须从中提取子字符串并查询其值。
declare @str varchar(max)
@str='Hello,world,continent,nation,city'
select * from mytable
where col_word in(SELECT REPLACE(@str,',',''','''))
子查询
SELECT REPLACE(@str,',',''',''')
结果
Hello,'world','continent','nation','city
我希望上面的结果用单引号括起来,以便它可以用于IN
但这仅返回第一个col_word值Hello
,它是@str
中的第一个子字符串。
我该怎么办?
答案 0 :(得分:3)
试试这个:
您无法将查询的一部分视为字符串。我们必须将整个查询作为字符串,然后使用EXEC()命令..或sp_executesql存储过程执行它。推荐后者。
declare @str varchar(max);
select @str='Hello,world,continent,nation,city';
SELECT @str=''''+REPLACE(@str,',',''',''')+''''
exec('select * from mytable where col_word in('+@str +')')
答案 1 :(得分:1)
试试这个:
declare @str varchar(max)
declare @pattern varchar(max)
SET @str='Hello,world,continent,nation,city'
SELECT REPLACE(@str,',',''',''')
SET @pattern = REPLACE('Hello,world,continent,nation,city', ',', ''',''')
EXEC('select * from mytable where col_word in(''' + @pattern + ''')')