输入参数b varchar2 '1,2,3,4,5,6,7 '
但是过程 中查询的时候是select * from table where id in(b)
这样查询出来的效果是select * from table where id in('1,2,3,4,5,6,7')
但我想要的结果是select * from table where id in(1,2,3,4,5,6,7)
怎么操作
没办法,这东西没办法用参数话查询.只能拼接字符串,
用动态SQL吧,建一个变量@Sql,然后用拼接字符串的方法得到SQL,把值赋给@Sql,然后执行这个@Sql得到结果集。
哎,换工作以后,用的是sqlserver数据库,所以对于其中的一些函数不是很清楚了,我最近刚好碰到了跟你一样的问题,我的某个字段的数据格式是这样的 '武汉','天津','长沙','','广州',我的其他表刚好有个字段存放的只是一个城市名,所以也要用in语句,我是讲这个字符串拆分成一个临时表,然后查询这个临时表中的数据,然后再用in,就可以解决了,代码如下
ALTER Function [dbo].[StrToTable](@str varchar(1000)) Returns @tableName Table ( str2table varchar(50) ) As --该函数用于把一个用逗号分隔的多个数据字符串变成一个表的一列,例如字符串'ab','dc' 将编程一个表,这个表 Begin set @str = @str+','--字符串成了'ab','dc', Declare @insertStr varchar(50) --截取后的第一个字符串 Declare @newstr varchar(1000) --截取第一个字符串后剩余的字符串 set @newstr = stuff(@str,1,charindex('''',@str),'')--截取掉了字符串中的第一个单引号 成了ab','dc', set @insertStr = left(@newstr,charindex('''',@newstr)-1)--截取到下一个单引号之间的字符 例如 ab','dc', -->成了','dc' set @newstr = stuff(@newstr,1,charindex(',',@newstr),'')--将剩余字符串到第一个逗号之间的字符又用''(空字符串代替) -->成了'dc', Insert @tableName Values(@insertStr) while(len(@newstr)>0) begin set @newstr = stuff(@newstr,1,charindex('''',@newstr),'') set @insertStr = left(@newstr,charindex('''',@newstr)-1) Insert @tableName Values(@insertStr) set @newstr = stuff(@newstr,1,charindex(',',@newstr),'') end Return End