1 -- =============================================
2 -- Author: sucsy
3 -- Create date: 2011-7-6
4 -- Description: 获取任意时间段平均降水量
5 -- =============================================
6 ALTER FUNCTION [dbo].[GetAnyTimeSectionPrecipitationAvg]
7 (
8 @startDate datetime,
9 @endDate datetime,
10 @Stations varchar(2000)
11 )
12 RETURNS @returnTable Table (区站号 nvarchar(10) not null,
13 --站名 nvarchar(100) not null,
14 汇总值 decimal(18,3) not null,
15 年度 int)
16 AS
17 begin
18 declare @tempTable Table (区站号 nvarchar(10) not null,
19 --站名 nvarchar(100) not null,
20 汇总值 decimal(18,3) not null,
21 统计日期 date)
22
23
24 declare @deffYear int --年代数
25 declare @deffMonth int --统计月数
26 declare @deffDay int --统计日数
27 declare @tempStartDate date --当前计算开始日期
28 declare @tempEndDate date --当前计算结束日期
29 declare @currentYear int --当前年份递增变量
30
31 --设置初始递增年份
32 set @currentYear = 0
33 --设置统计年代数
34 set @deffYear = YEAR(@endDate) - YEAR(@startDate)
35 set @deffDay = DAY(@endDate) - DAY(@startDate)
36 --设置单年统计月数
37 if MONTH(@startDate)<=MONTH(@endDate)
38 set @deffMonth = MONTH(@endDate) - MONTH(@startDate)
39 else
40 begin
41 set @deffMonth = MONTH(@endDate) + MONTH(@startDate) - 12
42 set @deffYear=@deffYear-1
43 end
44
45 --遍历统计年代
46 while @currentYear<=@deffYear
47 begin
48 --设置当前计算开始日期
49 set @tempStartDate=dateadd(YYYY,@currentYear,CONVERT(DATETIME,@startDate))
50 --设置当前计算结束日期
51 set @tempEndDate=dateadd(MM,@deffMonth,CONVERT(DATETIME,@tempStartDate))
52
53 set @tempEndDate=dateadd(dd,@deffDay,CONVERT(DATETIME,@tempEndDate))
54
55 insert into @returnTable
56 Select 区站号,SUM(汇总值)*0.1,YEAR(@tempStartDate) from [降水历史资料库].dbo.降水日数据汇总表 where
57 年=YEAR(@tempStartDate)
58 and 汇总指标编码='R_Day'
59 and 统计日期>=@tempStartDate
60 and 统计日期 <=@tempEndDate
61 and 汇总值<30000
62 group by 区站号
63 --设置当前年份递增变量
64 set @currentYear = @currentYear + 1
65 end
66 RETURN;
67 end
2 -- Author: sucsy
3 -- Create date: 2011-7-6
4 -- Description: 获取任意时间段平均降水量
5 -- =============================================
6 ALTER FUNCTION [dbo].[GetAnyTimeSectionPrecipitationAvg]
7 (
8 @startDate datetime,
9 @endDate datetime,
10 @Stations varchar(2000)
11 )
12 RETURNS @returnTable Table (区站号 nvarchar(10) not null,
13 --站名 nvarchar(100) not null,
14 汇总值 decimal(18,3) not null,
15 年度 int)
16 AS
17 begin
18 declare @tempTable Table (区站号 nvarchar(10) not null,
19 --站名 nvarchar(100) not null,
20 汇总值 decimal(18,3) not null,
21 统计日期 date)
22
23
24 declare @deffYear int --年代数
25 declare @deffMonth int --统计月数
26 declare @deffDay int --统计日数
27 declare @tempStartDate date --当前计算开始日期
28 declare @tempEndDate date --当前计算结束日期
29 declare @currentYear int --当前年份递增变量
30
31 --设置初始递增年份
32 set @currentYear = 0
33 --设置统计年代数
34 set @deffYear = YEAR(@endDate) - YEAR(@startDate)
35 set @deffDay = DAY(@endDate) - DAY(@startDate)
36 --设置单年统计月数
37 if MONTH(@startDate)<=MONTH(@endDate)
38 set @deffMonth = MONTH(@endDate) - MONTH(@startDate)
39 else
40 begin
41 set @deffMonth = MONTH(@endDate) + MONTH(@startDate) - 12
42 set @deffYear=@deffYear-1
43 end
44
45 --遍历统计年代
46 while @currentYear<=@deffYear
47 begin
48 --设置当前计算开始日期
49 set @tempStartDate=dateadd(YYYY,@currentYear,CONVERT(DATETIME,@startDate))
50 --设置当前计算结束日期
51 set @tempEndDate=dateadd(MM,@deffMonth,CONVERT(DATETIME,@tempStartDate))
52
53 set @tempEndDate=dateadd(dd,@deffDay,CONVERT(DATETIME,@tempEndDate))
54
55 insert into @returnTable
56 Select 区站号,SUM(汇总值)*0.1,YEAR(@tempStartDate) from [降水历史资料库].dbo.降水日数据汇总表 where
57 年=YEAR(@tempStartDate)
58 and 汇总指标编码='R_Day'
59 and 统计日期>=@tempStartDate
60 and 统计日期 <=@tempEndDate
61 and 汇总值<30000
62 group by 区站号
63 --设置当前年份递增变量
64 set @currentYear = @currentYear + 1
65 end
66 RETURN;
67 end