2016-08-21 5 views
2

現在の時刻が2つの時刻の間にあるかどうかを調べようとしています。私の終了時刻がの後にになる場合を除いて、私の開始時刻がその日の間は、それはうまくいきます。例えばMySQLを使用した時差 - 中夜以降の終了時間がない

に、私が持っている場合:

スタート: 17時00分

終了: 3時00

電流:午前18時30

それは表示されません。

論理がどこで間違っているのか理解していますが、論理的かつ概念的に修正点が見つかりません。つまり、06:30 PMは午後5時から午前3時の間に落ちますが、翌日の03 AMに落ちると主張することができます。

この問題をどのように克服できますか?ここで

は、以下の私のクエリです:

SELECT * FROM products 
     JOIN restaurants 
     ON (products.Venue = restaurants.name) 
     WHERE products.Drink_Category = Beer 
     AND restaurants.Area = Racks 
     AND (
     HOUR(18:30) >= HOUR(products.Start) -- here is where the time is set 
     AND HOUR(18:30) <= HOUR(products.End) --and here is the end 
     ) 
     ORDER BY products.Price/products.Multiple ASC; 

私もBETWEENクエリを試してみましたが、まだそれは、これらの特定の例では動作しません。

+0

どのようなSQL方言ですか? – Lucero

+0

@Lucero、それはちょうど編集されたむしろMySQLです。 – Sina

答えて

1

基本的にproducts.Endproducts.Startより小さい場合は、日の折り返しを考慮して24を追加してください。例えば。

SELECT * FROM products 
    JOIN restaurants 
    ON (products.Venue = restaurants.name) 
    WHERE products.Drink_Category = Beer 
    AND restaurants.Area = Racks 
    AND (
    HOUR(18:30) >= HOUR(products.Start) -- here is where the time is set 
    AND HOUR(18:30) <= CASE 
     WHEN products.End<products.Start 
     THEN HOUR(products.End)+24 
     ELSE HOUR(products.End) END --and here is the end 
    ) 
    ORDER BY products.Price/products.Multiple ASC; 
+0

それだけでなく、それはそれを打ちました。どのようなクエリ、感謝の仲間! – Sina

+1

@Strawberry仕事の説明から、私の前提は「特定の時刻」の範囲であるため「いいえ」であり、それは日付に依存しない(したがって、ラップには24時間が正しい)。シーナ、私が間違っていれば私を修正してください。 ;) – Lucero

+0

Ok、Fair enough – Strawberry

0

あなたは2つの方法があります:あなたの終了時間に行く場合は、バックエンドにあなたの状態を変更することができます

Select * FROM table_event where ((SaleDate >= @FromDate) AND (SaleDate < @ToDate)) Order by SaleDate DESC 

2 - :このようなあなたの条件で の1-使用完全な日付時刻値を明日は次のような別の条件を書く必要があります:

(HOUR(18:30) >= HOUR(products.Start) AND HOUR(23:59) <= HOUR(products.End)) 
    OR 
    (HOUR(00:00) >= HOUR(products.Start) AND HOUR(3:00) <= HOUR(products.End)) 
関連する問題