--调用示例
select * from dbo.f_getdate('2003-01-01','2003-01-20')
*/
if exists(select 1 from sysobjects where id=object_id('f_getdate') and objectproperty(id,'IsInlineFunction')=0)
drop function f_getdate
go
create function f_getdate(@dt1 datetime,@dt2 datetime)
returns @re table(id int identity(0,1),dt datetime)
as
begin
declare @i int
select @i=datediff(day,@dt1,@dt2)+1
while @i>1
begin
insert into @re(dt) select top 100 @dt1 from syscolumns
set @i=@i-100
end
delete from @re where id>datediff(day,@dt1,@dt2)
update @re set dt=dateadd(day,id,dt)
return
end
go
1.DATEDIFF ( datepart , startdate , enddate )
datepart参数:日期部分 缩写
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
startdate:计算的起始日期
enddate:计算的终止日期
2.功能:按设定参数的格式返回计算的终止日期与计算的起始日期的差值
3.例:select datediff(d,字段名,getdate()) from table
结果:返回字段名与当前系统时间天数的差值
不好意思。打个补丁:
declare @time_begin datetime,@time_end datetime,@count varchar(10)
set @time_begin='2003-12-1'
set @time_end='2004-1-1'
set @count=cast(datediff(day,@time_begin,@time_end) as varchar(10))
exec('
select top '+@count+' identity(int,0,1) id into #t from sysobjects a,sysobjects b,sysobjects c
select dateadd(day,id,'''+@time_begin+''') from #t
drop table #t
')
exec('
declare @time_begin datetime,@time_end datetime,@count int
set @time_begin=''2003-12-1''
set @time_end=''2004-1-1''
set @count=datediff(day,@time_begin,@time_end)
select identity(int,1,1) id into #t from sysobjects a,sysobjects b,sysobjects c
select dateadd(day,id,@time_begin) from #t
drop table #t
')
/*********如下存储过程用于批量录入资料**************/
create Procedure AddWorkCalendar @BDate SmallDateTime,@EDate SmallDateTime
As
Declare @CDate SmallDateTime
Declare @Flag1 Bit
Declare @Flag2 Bit
Declare @Flag3 Bit
Set @CDate = @BDate
If Exists (Select * from calendar Where cld_rq Between @BDate And @EDate)
Begin
Raiserror('已有该范围的资料,请核对开始日期和结束日期!!!',16,-1)
Return
End
While @CDate <= @EDate
Begin
Set @Flag1 = (Case When DatePart(WeekDay,@CDate) in (1,7) then 0 Else 1 End)
Set @Flag2 = (Case When DatePart(WeekDay,@CDate)=1 then 0 Else 1 End)
Set @Flag3 = 1
Insert calendar Values(@CDate,@Flag,@Flag1,@Flag2)
Set @CDate = DateAdd(Day,1,@CDate)
End