任务说明及要求:
现有一个数据库SQL Server 2000,里面包含着72个小时的高速公路各个收费站的数据。现要求:查询72个小时内这个数据库里面的各个收费站每间隔十分钟通过各个收费站的车辆数。例如:查询济南北这个收费站的情况,则统计 2005-07-22 00:00:00到2005-07-22 00:10:00 通过济南北收费站的车辆数,统计完以后,再统计2005-07-22 00:10:00到2005-07-22 00:20:00 通过济南北收费站的车辆数,以此类推。最好能编一个程序,能让各个10分钟间隔时间段通过某一收费站车辆数一目了然。
程序代码如下:
以下部分是为了测试SQL代码是否正确分来步骤进行的。
最终代码只需要三四步。
--第一步:一个十分钟内的济南北车站的数量
--测试该语句的正确与否
select * from trafficdata
where dot1name='济南北'and time1>='2005-07-22 00:00:00' and time1<'2005-07-22 00:10:00'
or dot2name='济南北' and time2>='2005-07-22 00:00:00' and time2<'2005-07-22 00:10:00';
--第二步:打印一个时间间隔的车辆数
--测试该SQL Server存储过程语法语句正确与否
--“@temp1=convert(varchar(3),@temp)”表示将int型变量转化成varchar型变量
create PROCEDURE GetCount
as
Declare @temp1 varchar(3)
Declare @temp Int
SELECT @temp = COUNT(*) FROM trafficdata where dot1name='济南北'and time1>='2005-07-22 00:00:00' and time1<'2005-07-22 01:00:00' or dot2name='济南北' and time2>='2005-07-22 00:00:00' and time2<'2005-07-22 01:00:00';
set @temp1=convert(varchar(3),@temp)
print @temp1
--第三步:创建存储过程
--该存储过程没有输入参数,将需要的数据直接打印
--“DATEADD(mi, 10,@start_date )”表示函数使变量@start_date增加十分钟
--While循环部分 Begin--End配对
Drop PROCEDURE mysp_para
Create PROCEDURE mysp_para
AS
Declare @start_date DateTime --循环开始时间
Declare @end_date DateTime --循环结束时间
Declare @temp2 varchar(3) --用来接收每次循环的车辆数目 Varchar类型
Declare @temp1 varchar(8000) --所有循环的车辆数目 以逗号间隔
Declare @temp Int --用来接收每次循环的车辆数目 Int类型
Declare @Size Int --循环次数
Declare @address varchar(10) --收费站名称
Set @start_date='07 23 2005 ';
Set @Size=0;
Set @address='济南北';
Set @temp2='';
Set @temp1='';
while (@Size<3*24*6)
Begin
Set @end_date=DATEADD(mi, 10,@start_date );
Set @temp=0;
SELECT @temp = COUNT(*) FROM trafficdata where dot1name=@address and time1>=@start_date and time1<@end_date or dot2name=@address and time2>=@start_date and time2<@end_date;
Set @temp2=convert(varchar(3),@temp);
Set @temp1=@temp1+ @temp2+',';
Set @start_date=@end_date;
Set @Size=@Size+1 ;
End
print @end_date
print @temp2
print @temp1
print @start_date
print @Size
GO
--第四步:执行
--执行该存储过程,得到2005-07-22开始三天内的所有通过济南北的车辆数据,格式“23,3,6,3,.....”
EXEC mysp_para