求一个字符串拆分函数-----小难
传入字符串参数为:20140114-013
其中 20140114 是个日期,013是个序号
=========================================
比如传入参数 20140114-013, 要求函数输出 20140114-014 ,也就是序号+1 (序号最小为001,最大为120)
有一种特殊情况,当传入参数的序号为120时,就要求日期+1
比如参数为 20140114-120 ,就要输出 20140115-001
=================================================
例子:
参数为 20140114-001 ,要输出 20140114-002
参数为 20140114-014 ,要输出 20140114-015
参数为 20140114-110 ,要输出 20140114-111
略....
参数为 20140114-120 ,要输出 20140115-001
create function split_str
(@s varchar(12))
returns varchar(12)
as
begin
declare @temp int
declare @date datetime
declare @re varchar(20)
set @date=substring (@s,0,9)
set @temp =substring(@s,10,3)
if @temp<120
begin
set @temp=@temp+1
set @re=convert(varchar(11),@date,112 )+ right('000' + cast(@temp as varchar) , 3)
end
if @temp=120
begin
set @date=dateadd(day,1,@date)
set @re= convert(varchar(11),@date,112 )+'001'
end
return @re
end
go
--select dbo.split_str('20140114-010')
--20140114011
--select dbo.split_str('20140114-120')
--20140115001
create function dbo.get_num(@v varchar(20))
returns varchar(20)
as
begin
return case when right(@v,3)='120'
then convert(varchar(8),dateadd(day,1,LEFT(@v,8)),112)+'-001'
else LEFT(@v,8)+'-'+right('000'+cast(right(@v,3)+1 as varchar),3)
end
end
go
select dbo.get_num('20140131-120')
/*
20140201-001
*/
select dbo.get_num('20140114-001')
/*
20140114-002
*/