某车 8:05 进A区停靠,12:20 分转到B区停靠,19:00车主取车,你这还有另一个表吧? 还有12:20 分转到B区停靠 这20分钟什么算?算一个小时的,还是1/3小时的钱?
解决方案 »
- 请问为什么我没办法获取SQL的字段名
- sql 中SET LOCK_TIMEOUT 1000 的作用范围有多大 ,事务为什么没有回滚全部数据
- 菜鸟问题,急等!!!
- 求一条SQL查询语句:如何查询介于某个时间段内的数据?
- 棘手问题,现在数据库中有非常大量的数据,现在需要加密,不知道怎么做!!
- 如何求和后进行排序
- 如何增加SQL7.0的用户数
- [求助]请问我想在服务器上建立一个JOB,从数据库取一些数据生成一个文件,该怎么做啊?
- 请问这样的SQL语句怎么写:用insert into 同时增加几条记录,access 数据库
- 求求各位啊:我有没必要去培训!!!!!!
- 解析日期问题,在线急等
- SQL Server 2000 能够承受的访问量和数据量?
其实 真正的停车场费用计算一般都固化到了卡表里...只有那种门口收费刷卡的才会使用这中办法了....转车的时候也需要添加记录....看你的库怎么设计了....
a,b车场压根就分开也可以....--要是这bt..每一个小时都换一个场呢
写写看...
收费表
区域 开始时间 结束时间 收费标准
A区 07:00 12:00 10
A区 12:00 18:00 20
A区 18:00 24:00 30
B区 07:00 12:00 15
B区 12:00 18:00 25
B区 18:00 24:00 35车辆存放表
车号 存放时间 取出时间 区域
0001 2007-7-1 8:05 2007-7-1 10:20 A区
0001 2007-7-1 12:20 2007-7-1 19:00 B区确认设计后再想法写语句
区域 varchar(10),
开始时间 varchar(10),
结束时间 varchar(10),
收费标准 int
)
insert @收费表 select
'A区', '07:00', '12:00', 10
union all select
'A区', '12:00', '18:00', 20
union all select
'A区', '18:00', '24:00', 30
union all select
'B区', '07:00', '12:00', 15
union all select
'B区', '12:00', '18:00', 25
union all select
'B区', '18:00', '24:00', 35declare @车辆存放表 table (
车号 varchar(10),
存放时间 datetime,
取出时间 datetime,
区域 varchar(10)
)
insert @车辆存放表 select
'0001', '2007-7-1 8:05' , '2007-7-1 12:20' , 'A区'
union all select
'0001', '2007-7-1 12:20', '2007-7-1 19:00' , 'B区'select a.车号,sum(1.0*datediff(minute,case when a.存放时间>cast(convert(varchar(10),a.存放时间,120)+' '+b.开始时间 as datetime) then a.存放时间 else cast(convert(varchar(10),a.存放时间,120)+' '+b.开始时间 as datetime) end,case when a.取出时间>case when b.结束时间='24:00' then cast(convert(varchar(10),dateadd(day,1,a.取出时间),120) as datetime) else cast(convert(varchar(10),a.取出时间,120)+' '+b.结束时间 as datetime) end then case when b.结束时间='24:00' then cast(convert(varchar(10),dateadd(day,1,a.取出时间),120) as datetime) else cast(convert(varchar(10),a.取出时间,120)+' '+b.结束时间 as datetime) end else a.取出时间 end)/60*b.收费标准) as 总收费
from @车辆存放表 a,@收费表 b
where a.区域=b.区域
and (a.存放时间>=cast(convert(varchar(10),a.存放时间,120)+' '+b.开始时间 as datetime)
and a.存放时间<case when b.结束时间='24:00' then cast(convert(varchar(10),dateadd(day,1,a.存放时间),120) as datetime) else cast(convert(varchar(10),a.存放时间,120)+' '+b.结束时间 as datetime) end
or a.取出时间>cast(convert(varchar(10),a.取出时间,120)+' '+b.开始时间 as datetime)
and a.取出时间<=case when b.结束时间='24:00' then cast(convert(varchar(10),dateadd(day,1,a.取出时间),120) as datetime) else cast(convert(varchar(10),a.取出时间,120)+' '+b.结束时间 as datetime) end
)
group by a.车号--结果
车号 总收费
---------- ----------------------------------------
0001 222.499970(所影响的行数为 1 行)
12:00-12:20 A区 20分钟 20元/小时 收6.666666元
12:20-18:00 B区 340分钟 25元/小时 收141.666666元
18:00-19:00 B区 60分钟 35元/小时 收35元
停车费总额222.49元