2009-07-13 3 views
0

Ich versuche, eine SQL-Anweisung zu schreiben, die Zeitbereiche vergleicht. Ich habe ein paar gute Ideen von dieser Frage:Zeitbereiche vergleichen

Comparing date ranges

Das Problem ist jedoch Zeiten, die über Mitternacht hinaus z.B. angesichts der folgenden Start- und Endzeiten:

  • 19:00 - 20:00 Uhr
  • 21.00 bis 21.30
  • 23.00 bis 1.00
  • 01:00 - 03: 00

Ich möchte alle Zeilen finden, wo die Zeiten 23:30 - 00:30 schneiden/überlappen. Der Code funktioniert nur, wenn sowohl die Zeilen in der Datenbank als auch der Zeitbereich, den ich prüfen möchte, am selben Tag beginnen und enden.

Ich habe versucht, die Zeiten in Sekunden seit Mitternacht zu konvertieren und dann 86400 Sekunden zur Endzeit hinzuzufügen, wenn der Bereich Mitternacht umfasst. Ich hatte damit begrenzten Erfolg, aber es fehlen immer noch einige überlappende Bereiche. Hier

+0

ähnlich sein, welche Art von SQL verwenden Sie? Postgre? mysql? t-sql? – Peter

+0

Es ist mysql, aber ich würde gerne mehr über die Mathematik lernen, die es auch gibt. –

Antwort

0

ist die Antwort in SQL Server - mysql würde

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