2011-12-04 17 views
0

と仮定私次の表があります:00-11:30レコードの選択

id | value | start_time | stop_time 
----------------------------------------------------------------- 
1 | value1 | 06:00:00 | 11:00:00 
2 | value2 | 12:00:00 | 13:00:00 

が、私はその時間帯のオーバーラップ05のレコードを選択する必要があります。つまり、返されるレコードが1行目であることを意味します。

このようなクエリを試しましたが、指定された時間範囲が真夜中になると失敗します。おそらくそれは日付を伴わずに行うことは不可能です。

SELECT * FROM table WHERE 
(
    (start_time >= '05:00:00' AND stop_time <= '11:30:00') || 
    (start_time >= '05:00:00' AND start_time <= '05:00:00') || 
    (start_time <= '05:00:00' AND stop_time >= '11:30:00') || 
    (stop_time >= '11:30:00' AND stop_time <= '05:00:00') 
) 

私はBETWEENを使用して、指定された時間範囲およびフィルタリングのすべての分を列挙すると思っていますが、よりよい解決策があるかもしれません。あなたが希望する結果を達成するために、私は見ることができます

+2

はあなたが私達にあなたの 'BETWEEN'クエリを示してもらえますか? – marcio

+2

@Daveこのデータ型は、この表の 'start_time'と' stop_time'フィールドに使用していますか? –

+0

私は2番目のmarcioさんとalexさんです - あなたのSQLコマンドとテーブルのデータ構造も投稿してください。追加のテーブルデータと期待される結果も素晴らしいでしょう。 :) – Nonym

答えて

0

デイブ、

最も簡単な方法は、start_timeと「stop_time`フィールドに「TIME」タイプを使用するようになります。 そして、あなたは次のように選択することができます。

SELECT * FROM `YOUR_TABLE_NAME_HERE` WHERE `start_time` > '05:00:00' AND `stop_time` < '11:30:00' 
0

すべての範囲はそうのような、条件付きで表現する必要があります:

IF(start_time < stop_time, start_time >= '05:00:00' AND stop_time <= '11:30:00', start_time <= '05:00:00' AND stop_time >= '11:30:00')