2016-11-16 15 views
-1

兩個日期時間值進行比較,我希望在SQL Server的比較兩個datetime列,例如,我有一個像如何在SQL

數據

表A

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

,我需要比較與表B表A的值,它是如下

表B

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

期望它不應該匹配,因爲TableB中的結束日期大於TableA的結束日期。

到目前爲止,我試過的是,但它沒有返回我想要的結果。

(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) 

任何想法,我很想念這裏..

問候,

+0

你可以舉兩個日期時間字段的例子,它們將會滿足你對「匹配」的定義嗎? –

+0

(TableA.StartDate = TableB.startdatetime AND TableA.EndDate = TableB.EndDate)將爲true,如果相應的開始和結束相等。如果不在前面,將不會返回true。 –

+0

你有兩個日期界限,這意味着他們可以關聯六種不同的方式:1.一個階段完全在另一個階段之前; 2.一個時期與開始時間重疊; 3一個時期與一個結束時間重疊; 4.一個時期完全在另一時期內; 5.時期完美匹配; 6.一個時期完全是在第二個時期之後。你的例子是4號。你究竟想要匹配什麼? –

回答

0

我設法解決了使用以下條件的問題。我認爲如果我們嘗試與Time進行比較,SQL Server只考慮日期部分。因此,我不得不分開時間部分來比較相同。

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

如果我正確理解你的問題,你想找到TABLEA 2倍的值,其共同存在於TABLEB( ST和ED都在同一條記錄中。) 我猜這兩個表除了這兩個確切的日期匹配之外沒有其他匹配的值,例如唯一的ID。

一個小測試後:

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

返回的每一個值。無用。

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

返回數百萬個匹配,無用。該表只有1000條記錄。

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

返回27個匹配項。正確答案。

希望這會有所幫助。

+0

它不匹配,應該是日期和時間2個值集合之間的比較。 – Arayn