簡體   English   中英

比較多個條目的日期

[英]Comparing Dates For Multiple Entries

即時通訊創建一個小型的租車系統,我想要一個存儲過程,該程序需要一個日期並檢查以查看哪些車可用。 我已經進行了比較,但是如果一輛車有多個合同,並且其中一個合同不是針對輸入的日期,而是另一個合同,則表示該車可用。 到目前為止,這是我的程序

delimiter //

create procedure allAvailableVehicles(req varchar(15))    
BEGIN

select distinct vehicles.vehicleID as "Vehicle ID", vehicles.Make as "Make", vehicles.Model as "Model" from vehicles

left outer join contracts
on vehicles.vehicleID=contracts.vehicleID
where cast(req as date) not between hiredFrom and hiredUntill
or contractID is unknown
order by vehicles.vehicleID;

end
//    
delimiter ;

這是一個not exists的好機會:

select v.*
from vehicles v
where not exists (select 1
                  from contracts c
                  where c.VehicleId = v.VehicleId and
                        cast(req as date) between hiredFrom and hiredUntil
                 );

注意:您不需要將req為日期,因為它應該已經作為日期存儲在數據庫中(除非req也具有時間分量)。

編寫存儲過程的更好方法是:

delimiter //

create procedure allAvailableVehicles(p_req date)
begin
  select v.*
  from vehicles v
  where not exists (select 1
                    from contracts c
                    where c.VehicleId = v.VehicleId and
                          p_req between hiredFrom and hiredUntil
                   );
  end //

  delimiter ;

使用內置類型作為日期/時間。 另外,命名您的參數以將其與列區分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM