日期:2014-05-17  浏览次数:20503 次

求最优算法
传入一个字符串, 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


因为传入的字符串可能比较多,所以希望是最优算法。可用存储过程。谢谢。
 

------解决方案--------------------
SQL code
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',',')

------解决方案--------------------
简单的拆分的话,用内置函数最快
------解决方案--------------------
就是一般的循环拆分了。
SQL code
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

------解决方案--------------------
4个以下用parsename 4个以上用自定义函数。