2016-11-16 5 views
-1

ich für den Vergleich von zwei Datetime-Spalten in SQL Server suchen, zum Beispiel, ich habe Daten wieWie vergleichen zwei Datetime-Werte in SQL

TableA:

Start Date "2016-11-04 06:00:00.000" 
End Date  "2016-11-04 08:15:00.000" 

Und ich brauche zu vergleichen Wert von Tabelle A mit der Tabelle B ist als

TableB folgt:

Start Date "2016-11-01 02:30:00.000" 
End Date  "2016-11-30 08:00:00.000" 

Es wird erwartet, dass es nicht übereinstimmen sollte, da das Enddatum in TabelleB größer als Enddatum von TableA ist.

Bisher habe ich es versucht, aber es bringt mir nicht das gewünschte Ergebnis zurück.

(TableA.StartDate BETWEEN TableB.startdatetime AND TableB.enddatetime) 
OR (TableA.EndDate BETWEEN TableB.startdatetime AND TableB.enddatetime) 
OR (TableB.startdatetime BETWEEN TableA.StartDate AND TableB.enddatetime) 
OR (TableB.enddatetime BETWEEN TableA.StartDate AND TableB.enddatetime) 

Jede Idee, was ich hier ..

Grüße,

+0

Können Sie ein Beispiel für zwei Sätze von Datetime-Feldern angeben, die Ihrer Definition einer Übereinstimmung entsprechen? –

+0

(TableA.StartDate = TableB.startdatetime AND TableA.EndDate = TableB.EndDate) wird True sein, wenn entsprechende Start- und Enddatum gleich sind. Putting NICHT vor wird wieder wahr, wenn sie nicht sind. –

+0

Sie haben zwei Datumsgrenzen, dh es gibt sechs verschiedene Möglichkeiten, wie sie verknüpft werden können: 1. Eine Periode ist vollständig vor der anderen; 2. eine Periode überlappt eine Startzeit; 3 Eine Periode überlappt eine Endzeit; 4. Eine Periode ist vollständig innerhalb der anderen Periode; 5. Die Perioden stimmen perfekt überein; 6. Eine Periode ist vollständig nach der zweiten Periode. Ihr Beispiel ist Nummer 4. Was genau versuchen Sie zu erreichen? –

Antwort

0

Ich habe es geschafft, das Problem unter Verwendung der Bedingung zu lösen. Ich denke, dass SQL Server nur Datum berücksichtigt, wenn wir versuchen, mit Zeit zu vergleichen. Daher musste ich den Zeitteil trennen, um dasselbe zu vergleichen.

TableA.StartDate >= TableB.startdatetime AND TableA.StartDate <= TableB.enddatetime 
    AND TableA.EndDate >= TableB.startdatetime AND TableA.EndDate <= TableB.enddatetime 
    AND (CAST(TableA.StartDate AS time) BETWEEN CAST(TableB.startdatetime AS time) 
    AND CAST(TableB.enddatetime AS time)) 
    AND (CAST(TableA.EndDate AS time) BETWEEN CAST(TableB.startdatetime AS time) 
    AND CAST(TableB.enddatetime AS time)) 
0

Wenn ich Ihre Frage richtig verstanden habe ich fehlt, versucht man zwei Werte in TABLEA, die zusammen in TABLEB existieren zu finden (Sowohl ST, als auch ED im selben Datensatz.) Ich vermute, dass die beiden Tabellen keinen anderen übereinstimmenden Wert als diese beiden genauen Datumsübereinstimmungen haben, zum Beispiel eine eindeutige ID.

Nach einem kleinen Test:

select st, ed 
from tableA 
where exists (select st, ed from tableB) 

Returns jeden einzelnen Wert. Nutzlos.

select * from 
tableA a join 
tableB b on a.st = b.st 
and a.ed = b.ed 

Gibt Millionen von Treffern zurück, nutzlos. Die Tabelle hat nur 1000 Datensätze.

select * from 
tableA a join 
tableB b on a.st = b.st 
and a.ed = b.ed 
and a.id = b.id 

ergibt 27 Treffer. Die richtige Antwort.

Hoffe, das hilft.

+0

Es passt nicht, es sollte Datum und Uhrzeit sein Vergleich zwischen zwei Wertemengen. – Arayn

Verwandte Themen