--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

解决方案 »

  1.   

    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 条件
    f_split