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.
4 Antworten
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
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;
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
Select * from myTable
Where time_start < date_end and time_end > date_start
Würde Ihnen überlappende Daten geben. Sie würden das
... 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
Neue Fragen
sql
Structured Query Language (SQL) ist eine Sprache zum Abfragen von Datenbanken. Zu den Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) gehören. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (bestimmte Erweiterungen / Funktionen verwendet), verwenden Sie stattdessen das Tag dieses DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten ISO / IEC-Standard-SQL verwenden.