34,588
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE my_proc(@syear int , @eyear int)
as
begin
declare @i as int
set @i = 0
while @syear <= @eyear
begin
set @i = @i + datediff(day , cast(@syear as varchar) + '-02-01' , cast(@syear as varchar) + '-03-01')
set @syear = @syear + 1
end
print 'result = ' + cast(@i as varchar)
end
go
exec my_proc 1980 , 2005
drop procedure my_proc
/*
result = 735
*/
CREATE PROCEDURE my_proc(@syear int , @eyear int)
as
begin
declare @i as int
set @i = 0
while @syear <= @eyear
begin
set @i = @i + datediff(day , cast(@syear as varchar) + '-02-01' , cast(@syear as varchar) + '-03-01')
set @syear = @syear + 1
end
print 'result = ' + cast(@i as varchar)
end
go
exec my_proc 1980 , 2005
drop procedure my_proc
/*
result = 735
*/
create function F_year(@startDate nvarchar(4),@EndDate nvarchar(4))
returns int
as
begin
declare @MonthDay int
set @MonthDay=0
while @startDate!> @EndDate
select @MonthDay=@MonthDay+
datediff(dd,
cast(@startDate+'0201' as datetime),
cast(Dateadd(month,1,@startDate+'0201') as datetime)
) ,
@startDate=@startDate+1
return @MonthDay
end
go
select dbo.F_year(2006,2007)
--drop function F_year
select top 1000 id=identity(int,0,1) into # from syscolumns a,syscolumns b
select 共有天数=sum(days) from
(
select days=datepart(day,dateadd(day,-1,convert(char(8),dateadd(month,1,[date]),120)+'1'))
from
(
select [date]=dateadd(year,id,'1980-02-01')
from #
where dateadd(year,id,'1980-02-01')<='2005-02-01'
) b
) a
drop table #
/*
共有天数
-----------
735
(所影响的行数为 1 行)
*/
--只计算二月份的天数和
select dbo.F_year(1980,2007)
-----------
791
(所影响的行数为 1 行)
select top 1000 id=identity(int,1,1) into # from syscolumns a,syscolumns b
select 共有天数=sum(days) from
(
select days=datepart(day,dateadd(day,-1,convert(char(8),dateadd(month,1,[date]),120)+'1'))
from
(
select [date]=dateadd(year,id,'1980-02-01')
from #
where dateadd(year,id,'1980-02-01')<='2005-02-01'
) b
) a
drop table #
/*
共有天数
-----------
706
(所影响的行数为 1 行)
*/
create function F_year(@startDate int,@EndDate int)
returns int
as
begin
declare @MonthDay int
set @MonthDay=0
while @startDate!>@EndDate
select @MonthDay=@MonthDay+datediff(dd,rtrim(@startDate)+'0201',dateadd(month,1,rtrim(@startDate)+'0201')),
@startDate=@startDate+1
return @MonthDay
end
--
select dbo.F_year(2006,2007)
select top 1000 id=identity(int,1,1) into # from syscolumns a,syscolumns b
select 共有天数=sum(days) from
(
select days=datepart(day,dateadd(day,-1,convert(char(8),dateadd(month,1,[date]),120)+'1'))
from
(
select [date]=dateadd(year,id,'1980-02-01')
from #
where dateadd(year,id,'1980-02-01')<='2005-02-01'
) b
) a
drop table #