通过datetimefield SQL Server加入

THE*_*HEn 0 sql sql-server join

我有两张桌子可以为SKU提供信息.

日志表有datetimefield 2008-10-26 06:21:59.820
其他表有datetimefield 2008-10-26 06:22:02.313

我想在这两个表的连接中包含这个日期时间字段.

是否可以加入具有差异不超过3秒的日期时间字段的表?最好的方法是什么?

tek*_*ues 7

这是一种方法:

select * from table_a, table_b
where table_a.sku = table_b.sku
and abs(datediff(second,table_a.datetime,table_b.datetime))<=3
Run Code Online (Sandbox Code Playgroud)

小心,大表这种连接可能会非常慢.


Tom*_*lak 5

SELECT
  t1.id,
  t2.id
FROM
  t1
  INNER JOIN t2 ON ABS(DATEDIFF(ms, t1.datefield, t2.datefield)) <= 3000
WHERE
  ...
Run Code Online (Sandbox Code Playgroud)

当心,这将是缓慢的.并且可能并不总是正确的(因为:它不会总是连接应该加入的记录,因为它们属于一起,它当然总是在技术上是正确的).

编辑:

ABS(DATEDIFF(ss, t1.datefield, t2.datefield)) <= 3因为@ richardtallent在评论中的出色观察而改变了上述内容.

  • 我同意这个答案并且对它进行了投票,但OP可能想要使用"ms"代替"ss"并测试3000而不是3.否则,小于3.5秒的增量将向下舍入到3秒并且包括在结果中,这可能是不希望的. (3认同)