2011-01-17 9 views
9

これは、私が動作させる方法では不可能かもしれないが、ここに行く。MySQL:BETWEENの時間を比較する

SELECT * FROM `table` WHERE CAST('05:00:00' AS time) BETWEEN `start` AND `end` 

、データベース内のエントリは次のとおりです。

`start` = '22:59:59' 
`end` = '06:00:00' 

しかし、クエリは結果を返しません。もちろん、これは、関連する日付があった場合には機能しますが、そうではありません。スタートが= '00:00:00'だった場合でも有効です。

+1

時刻は重要ではなく、日付ではありませんか?おそらく、'00:00:00 'と'06:00:00'の間、または'22:59:59 'と'23:59:59'の間の2つの部分に分割します。 –

+0

...または論理を逆転させ、'06:00:00 'と'22:59:59'の間にしないでください。 –

+0

これは、確かにそれを行う一つの方法だとは思っていませんでしたが、ロジックはアプリケーションの文脈では意味をなさないでしょう。しかし、提案してくれてありがとう、唯一の選択肢かもしれない。 – jmyz

答えて

17

私は何を探していることだと思う:

SELECT * FROM table WHERE start < CAST('05:00:00' AS time) AND end > CAST('05:00:00' AS time) 

これも動作するはずですけれども、私は、あなたがCAST Sを使用する必要があるかはわかりません。

SELECT * FROM table WHERE start < '05:00:00' AND end > '05:00:00' 
+0

ここで覚えておくべき重要なポイントは、時刻が24時間形式でフォーマットされている場合、照会でそれを照合する必要があるため、上記がおそらく「SELECT * FROM table WHERE start CAST('17時00分00秒' AS時) '" – Chiwda

13
SELECT * 
FROM `table` 
WHERE CAST('05:00:00' AS time) BETWEEN `start` AND `end` 
     OR (NOT CAST('05:00:00' AS time) BETWEEN `end` AND `start` AND `start` > `end`) 
+0

ウィンラーはあなたです –

+1

あなたは気楽です!現在のものではなく、答えとしてのマーカーでなければなりません! –

4

私はこの質問に出くわしたと私は同じ問題を抱えていました。私の解決策は以下の通りです:

SET @time = '05:00:00'; 

SELECT * FROM `table` 
WHERE IF(
     `start` < `end`, 
     CAST(@time AS TIME) BETWEEN `start` AND `end`, 
     (CAST(@time AS TIME) BETWEEN CAST('00:00:00' AS TIME) AND `end`) OR 
     (CAST(@time AS TIME) BETWEEN `start` AND CAST('24:00:00' AS TIME)) 
    ) = 1; 

将来的に誰かを助けることを望みます。

ありがとうございました!

1

単純な秒を使用して時間を比較することができます機能。次を使用してください:

SELECT id 
FROM table1 
WHERE TIME_TO_SEC('2014-03-05 04:17:47') >= TIME_TO_SEC('2014-03-05 04:17:47');