1

チェックイン日とチェックアウト日が指定した日付の範囲内にある客室料金を選択する必要があります。これらの料金は、条件に応じて個別に名前が付けられています。客室料金は、選択した日付によって異なります。これが私のコードです:

rate_eb

rate_name     rate_starts     rate_ends     rate_discount     rate_min_stay
---------------------------------------------------------------------------
Low Season    2013-05-01      2013-10-31    20                3            
High Season1  2013-11-01      2013-12-19    20                4
High Season2  2013-02-21      2013-04-31    20                4
Peak Season   2013-12-20      2014-02-20    20                5            

条件は次のとおりです。

  1. 予約はrate_startsrate_endsの間にある必要があります。
  2. 合計宿泊日数はrate_min_stay以上である必要があります。
  3. rate_discountは、別のテーブルのマスター レートからの割引率です。マスター レートが 100 の場合、この予約には 80 のレートが適用されます。

ここで、特に rate_discount について、日付範囲を指定して rate_db からこれらのデータを取得したいと考えています。これが私のmySQLです:

select rate_discount 
from rate_eb 
where rate_min_stay<='4' 
and reb_starts>='2013-06-19' 
and reb_ends<='2013-06-23'

上記のコードから。ローシーズンのrate_discount=20 を期待していますが、4 以下のレートがすべて選択されています。

それでは、解決策を教えてください。rate_starts と rate_ends の間の rate_discount にアクセスするようにコードを書き直す方法。

4

2 に答える 2

2

訪問者は 1 つの日付だけでなく、期間を入力できると想定しています。その期間の開始日がローシーズンで、終了日がハイシーズンの場合はどうなりますか? その場合、どのレートを見たいですか?

select rate_discount 
from rate_eb 
where rate_min_stay <= abs( datediff( reb_date2, reb_date1 ) )
and reb_date1 between rate_starts and rate_ends
and reb_date2 between rate_starts and rate_ends

reb_date1 は訪問者が入力した開始日であり、reb_date2 は終了日であると想定しています。

于 2013-03-10T11:04:13.250 に答える
0

to_date('dateInString'、'format')を使用して、文字列をreb_date1およびreb_date2の日付に変換し、rate_min_stayの比較よりも大きい値を実行している場合は、引用符で囲まれていない数値を直接使用します

于 2013-03-10T11:10:13.150 に答える