如何比较SQL中的两个日期时间值

时间:2016-11-16 03:51:58

标签: sql-server

我正在寻找比较SQL Server中的两个日期时间列,例如,我有像

这样的数据

表A

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

我需要将表A的值与表B进行比较,如下所示

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

任何想法,我在这里缺少的东西..

此致

2 个答案:

答案 0 :(得分: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场比赛。正确答案。

希望这有帮助。

答案 1 :(得分:0)

我已设法使用以下条件解决问题。我认为如果我们尝试与Time进行比较,SQL Server只考虑Date部分。因此,我不得不将时间部分分开来进行比较。

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