22,209
社区成员
发帖
与我相关
我的任务
分享
DECLARE @select varchar(max)
DECLARE @i1 int
DECLARE @i2 int
DECLARE @str varchar(100)
SET @select = 'select * from fram.statisticdata
where wfid in(100001,100002,100003)
and wtid in(100001001,100001002,100002001,100002004,100003003)
and (rectime >=''2014-11-1'' and rectime <=''2014-11-17'')'
SET @i1 = CHARINDEX('(',@select,1)
SET @i2 = CHARINDEX(')',@select,@i1+1)
SET @str = SUBSTRING(@select,@i1+1,@i2-@i1-1)
SELECT * FROM f_split(@str,',') --你自己做成游标
SET @i1 = CHARINDEX('(',@select,@i2+1)
SET @i2 = CHARINDEX(')',@select,@i1+1)
SET @str = SUBSTRING(@select,@i1+1,@i2-@i1-1)
SELECT * FROM f_split(@str,',') --你自己放到临时表
SET @i1 = CHARINDEX('(',@select,@i2+1)
SET @i2 = CHARINDEX(')',@select,@i1+1)
SET @str = SUBSTRING(@select,@i1,@i2-@i1+1)
PRINT @str --WHERE 条件
--SQL处理字符串不是很强,建议在程序上处理
--以下仅供参考
--以下方法有个约束,即where,and和条件的间隔为固定空格1
DECLARE @select VARCHAR(200)
SET @select='select * from fram.statisticdata where wfid in(100001,100002,100003) and wtid in(100001001,100001002,100002001,100002004,100003003) and (rectime >=''2014-11-1'' and rectime <=''2014-11-17'')'
--去掉where加个and,规范语句
SET @select='and'+STUFF(@select,1,CHARINDEX('where',@select)+4,'')
DECLARE @START INT,@END INT
SET @START=CHARINDEX('wfid in(',@select)+8
SET @END=CHARINDEX(')',@select,@START)
DECLARE @XML XML
SET @XML=CONVERT(XML,'<V>'+REPLACE(SUBSTRING(@select,@START,@END-@START),',','</V><V>')+'</V>')
--DECLARE TESTCURSOR CURSOR SCROLL FOR
--直接在这儿加游标即可
SELECT N.V.value('.','VARCHAR(20)') FROM @XML.nodes('//V')N(V)
--清除该查询条件
SET @select=STUFF(@select,@START-8-4,@END-@START+9+5,'')
SET @START=CHARINDEX('wtid in(',@select)+8
SET @END=CHARINDEX(')',@select,@START)
SET @XML=CONVERT(XML,'<V>'+REPLACE(SUBSTRING(@select,@START,@END-@START),',','</V><V>')+'</V>')
--在这添加到临时表
SELECT N.V.value('.','VARCHAR(20)')--INTO #临时表
FROM @XML.nodes('//V')N(V)
--也清除该查询条件
SET @select=STUFF(@select,@START-8-4,@END-@START+9+5,'')
--整理出最后的条件
SET @select=STUFF(@select,1,4,'')
SELECT @select