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

求一个字符串拆分函数-----小难
传入字符串参数为: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 dbo.get_num(@v VARCHAR(20))
RETURNS VARCHAR(20)
AS

BEGIN

RETURN CASE WHEN RIGHT(@v,3)='120'
THEN CONVERT(VARCHAR(10),DATEADD(DAY,1,CONVERT(DATE, LEFT(@v,8))),112) + '-001'
ELSE LEFT(@v,8)+'-'+RIGHT('000'+CAST(RIGHT(@v,3)+1 AS VARCHAR),3)
END
END
GO

------解决方案--------------------
修改一下1楼的


create function dbo.get_num(@v varchar(20))
returns varchar(20)
as
 
begin
 
return case when right(@v,3)='120'
                 then  CONVERT(VARCHAR(10),DATEADD(dd,1,CONVERT(varchar(100), SUBSTRING(@v,1,PATINDEX('%-%',@v)-1), 112)),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
 */

------解决方案--------------------

create function dbo.get_num(@str1 char(12))
returns char(12)
as
begin
DECLARE @str2 CHAR(8),@i int
SELECT @str2=LEFT(@str1,8),@i=RIGHT(@str1,3)+1
return CONVERT(CHAR(8),CAST(@str2 AS datetime)+@i/120,112)+'-'+RIGHT('00'+RTRIM(@i%120),3)
end
go
 
select dbo.get_num('20140131-120') 

------解决方案--------------------
自己的写的,希望便于你理解
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&n