2009-07-13 32 views
0

時間範囲を比較するSQL文を作成しようとしています。時間範囲の比較

Comparing date ranges

問題は、しかし、例えば深夜にまたがる倍である:私はこの質問からいくつかの優れたアイデアを得ました与えられた以下の開始時刻と終了時刻:

  • 夜07時 - 午後8時
  • 21時 - 午後九時30
  • 23時 - 午前1時
  • 1:00 - 03: 00

時刻が交差する行/ 23:30 - 00:30が重複する行を検索したい。私が持っているコードは、データベース内の行と同じ日に開始と終了をチェックしたい時間範囲の両方の場合にのみ機能します。

私は午前0時から秒に時間を変換してから、範囲が深夜になると終了時間に86400秒を追加しようとしました。私はそれで限定的な成功を収めましたが、それでもいくつかの重なり合った範囲が欠けています。ここで

+0

どのようなタイプを使用している同様のだろうか?ポストグレ? mysql? t-sql? – Peter

+0

これはmysqlですが、関わっている数学についてももっと学びたいと思っています。 –

答えて

0

は、SQL Serverでの答えです - MySQLは、SQLの

DECLARE @StartTime TIME, @EndTime TIME, @CheckTime TIME 
SET @StartTime = '20:00' 
SET @EndTime = '06:00' 
SET @CheckTime = '22:59' 

IF @StartTime <= @EndTime 
BEGIN 
    --same day eg 6pm - 11pm 
    IF @CheckTime >= @StartTime AND @CheckTime <= @EndTime 
     SELECT 'True' 
    ELSE 
     SELECT 'False' 
END 
ELSE 
BEGIN 
    --overlaps midnight 
    IF @CheckTime >= @EndTime OR @CheckTime <= @StartTime 
     SELECT 'true' 
    ELSE 
     SELECT 'false' 
END