首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

字符串拆分函数-小难

2014-01-19 
求一个字符串拆分函数-----小难传入字符串参数为:20140114-013其中 20140114 是个日期,013是个序号

求一个字符串拆分函数-----小难
传入字符串参数为: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

[解决办法]
引用:
Quote: 引用:

是这样吗:

create function dbo.get_num(@v varchar(20))
returns varchar(20)
as

begin

return case when right(@v,3)='120'
                 then cast(LEFT(@v,8)+1 as varchar)+'-001'
            else LEFT(@v,8)+'-'+right('000'+cast(right(@v,3)+1 as varchar),3)
       end
end
go


select dbo.get_num('20140114-120')
/*
20140115-001
*/


select dbo.get_num('20140114-001')
/*
20140114-002
*/
  



是的,但你这样日期加1肯定会出错。

比如 1月31号, select dbo.get_num('20140131-120')  得到的是 20140132-001 ,正确的应该是 20140201-001


修改了一下:

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
*/
  


[解决办法]
字符串拆分函数-小难

热点排行