求最优算法传入一个字符串,123,54,343,34,343 。。。大约有300到500个。传入一个日期2012-10-30得到结果:12320
求最优算法
传入一个字符串, 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个以上用自定义函数。 