日期:2014-05-18  浏览次数:20504 次

用字符串表示日期的比较和累加
create   procedure   CreateEvent
@eventRepeat   bit   =   0,
@eventStartDate   varchar(20),@eventEndDate   varchar(20),
@eventTitle   varchar(30),
@userName   varchar(30)
as
@eventTempDate   varchar(20)

begin

set   @eventTempDate   =   @eventStartDate

if   @eventRepeat   =   1
begin
while   @EventTempDate   <   @EventEndDate
begin
insert   into   T_Event(EventStartDate,EventEndDate,EventTitle,UserName)  
  values(@eventTempDate,@eventEndDate,@eventTitle,@userName)
set   @EventTempDate   ++     ?

end
end
else
begin
insert   into   T_Event(EventStartDate,EventEndDate,EventTitle,UserName)  
  values(@eventStartDate,@eventEndDate,@eventTitle,@userName)

end

end
go

@eventStartDate   varchar(20),@eventEndDate   varchar(20)   的值都是形为 '2007-01-11 '表示日期的字符串,
按照时间的先后比较2个的大小,如果@eventStartDate   <   @eventEndDate   则把@eventTempDate作为参数插入到记录中,插入猴并增加1天,
直到@eventTempDate等于   @eventEndDate为止,这里要考虑到日期的有效性,啥时候在天上累加,啥时候在月上累加,特别是润年,润月.

------解决方案--------------------
select dateadd(day,1, '2007-10-11 ')

-----------------------
2007-10-12 00:00:00.000

(1 row(s) affected)
------解决方案--------------------
转换为时间型后加一在转换回来.以@eventTempDate为例.

set @eventTempDate = cast(dateadd(day,1,cast(@eventTempDate as datetime)) as varchar)
------解决方案--------------------
create procedure CreateEvent
@eventRepeat bit = 0,
@eventStartDate varchar(20),@eventEndDate varchar(20),
@eventTitle varchar(30),
@userName varchar(30)
as

if isdate(@eventStartDate)=0 or isdate(@eventEndDate)=0
begin
raiserror( '日期 @eventStartDate=%s 或者 @eventEndDate=%s 格式不正确 ',16,1,@eventStartDate,@eventEndDate)
return (-1)
end

--@aebventTempDate varchar(20)

--begin

set @eventStartDate = @eventStartDate

if @eventRepeat = 1
begin
while @eventStartDate < @EventEndDate
begin
insert into T_Event(EventStartDate,EventEndDate,EventTitle,UserName)
values(@eventStartDate,@eventEndDate,@eventTitle,@userName)
set @eventStartDate = convert(varchar(10), dateadd(day,1,@eventStartDate), 120)
end
end
else
begin
insert into T_Event(EventStartDate,EventEndDate,EventTitle,UserName)
values(@eventStartDate,@eventEndDate,@eventTitle,@userName)
end

--end
go