传入一个字符串,  123,54,343,34,343 大约有300到500个。
传入一个日期       2012-10-30得到结果:
123    2012-10-30
54     2012-10-30
343     2012-10-30
34     2012-10-30
343    2012-10-30
因为传入的字符串可能比较多,所以希望是最优算法。可用存储过程。谢谢。
 

解决方案 »

  1.   

    create   function   f_splitstr(@SourceSql   varchar(8000),@StrSeprate   varchar(100))   
      returns   @temp   table(F1   varchar(100))   
      as     
      begin   
      declare   @ch   as   varchar(100)   
      set   @SourceSql=@SourceSql+@StrSeprate     
      while(@SourceSql<>'')   
                      begin   
                      set   @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)   
      insert   @temp   values(@ch)   
      set   @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')   
                      end   
      return   
      end   
        ----调用
      select   *,'2012-10-30' as 日期   from   dbo.f_splitstr('1,2,3,4',',') 
      

  2.   

    就是一般的循环拆分了。
    create   function   f_split(@c   varchar(2000),@split   varchar(2))   
    returns   @t   table(col   varchar(20))   
    as   
        begin   
        
          while(charindex(@split,@c)<>0)   
            begin   
              insert   @t(col)   values   (substring(@c,1,charindex(@split,@c)-1))   
              set   @c   =   stuff(@c,1,charindex(@split,@c),'')   
            end   
          insert   @t(col)   values   (@c)   
          return   
        end   
    go   
        
    select   *   from   dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')   
        
    drop   function   f_split 
    col                                       
    --------------------     
    dfkd   
    dfdkdf   
    dfdkf   
    dffjk   
      

  3.   

    4个以下用parsename 4个以上用自定义函数。