id        date_start        date_end
1         2018-01-01        2018-03-31
2         2018-04-01        2018-06-30
3         2018-07-01        2018-09-30
4         2018-10-01        2018-12-31

Als Eingabe habe ich time_start und time_end. Wie kann ich alle Zeilen zwischen diesen Daten auswählen, indem ich time_start und time_end mit date_start und date_end vergleiche?

Vielen Dank.

sql
-1
VladC 18 Apr. 2018 im 17:47

4 Antworten

Beste Antwort

Ist das was du willst?

select * from yourtable where 
time_start between date_start and date_end or time_end between date_start and date_end
0
Daniel Marcus 18 Apr. 2018 im 14:55

Was meinst du mit "zwischen"? Der Rest setzt voraus, dass die Startzeiten am oder vor dem Ende liegen.

Eine Definition ist, dass der gesamte "Zeitraum" während des Zeitraums liegt.

select t.*
from t
where @time_start >= date_start and @time_end <= date_end;

Ein weiterer Grund ist, dass sich die Perioden überhaupt überschneiden:

select t.*
from t
where @time_end >= date_start and @time_start <= date_end;
1
Gordon Linoff 18 Apr. 2018 im 23:17

Ich gehe davon aus, dass beide Eingabedaten zwischen den Datumsfeldern liegen sollten.

select * from whatever 
 where  time_start between date_start and date_end 
 and time_end between date_start and date_end
0
SouravA 18 Apr. 2018 im 14:59
Select * from myTable
Where time_start < date_end and time_end > date_start

Würde Ihnen überlappende Daten geben. Sie würden das nach Ihren Wünschen anpassen. Wenn zum Beispiel date_end 2018-05-06 ist und Ihr time_start auch 2018-05-06 ist, würden Sie Folgendes verwenden, um dies einzuschließen:

... time_start <= date_end

Wenn diese Werte für date_end, time_start wie eine Reservierung nicht als Überlappung angesehen werden (einer checkt an diesem Tag aus, ein anderer checkt ein), dann:

... time_start < date_end

HTH

0
Cetin Basoz 18 Apr. 2018 im 15:01