我正在寻找比较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)
任何想法,我在这里缺少的东西..
此致
答案 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) )