某车 8:05 进A区停靠,12:20 分转到B区停靠,19:00车主取车,你这还有另一个表吧?  还有12:20 分转到B区停靠 这20分钟什么算?算一个小时的,还是1/3小时的钱?

解决方案 »

  1.   

    假设每20分钟计费一次的.....
    其实 真正的停车场费用计算一般都固化到了卡表里...只有那种门口收费刷卡的才会使用这中办法了....转车的时候也需要添加记录....看你的库怎么设计了....
    a,b车场压根就分开也可以....--要是这bt..每一个小时都换一个场呢
    写写看...
      

  2.   

    这应该是个设计问题建议:
    收费表
    区域    开始时间  结束时间   收费标准
    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区确认设计后再想法写语句
      

  3.   

    按上面设计写了个语句,你可以参考下declare @收费表 table (
    区域       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 行)
      

  4.   

    这样计算的8:05--12:00  A区  235分钟  10元/小时  收39.166666元
    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元