根据日期时间连接表,但日期时间值可在5分钟内变化

use*_*916 3 t-sql sql-server sql-server-2005 sql-server-2008

我在这里使用一些设计很差的表,并且改变结构或多或少是不可能的.所以说,这是我的问题.

我需要在TableA.Date上加入TableB.Date,边距约为5分钟.换句话说,连接不能依赖于完美匹配.

因此,如果TableA中的日期是2011-12-01 10:00:00.000,则连接将匹配TableB中日期为2011-12-01 10:03:00.000或者2011-12-01 09:59:00.000或的记录2011-12-01 10:04:35.000

我想出了一个小技巧,通过将日期时间转换为smalldatetime来允许大约1分钟的差异,从而减少日期时间值的第二个和毫秒.它工作得很好,但我需要更大的余量.

LEFT JOIN TableB ON CAST(TableA.SomeDate AS smalldatetime) = CAST(TableB.SomeDate AS smalldatetime)
Run Code Online (Sandbox Code Playgroud)

TableB中的日期列是两个表中数据之间的唯一链接,因此我无法在WHERE子句中过滤结果.我意识到这可能会产生一些不准确的结果,但由于数据的存储方式和时间,我不应该遇到任何问题.

有什么建议?

gbn*_*gbn 5

尝试DATEDIFF寻找少于300秒(分钟边界为零秒,这将给出不正确的结果).为了更准确,重要的是,使用毫秒<300000

TableA
LEFT JOIN 
TableB ON ABS(DATEDIFF(second, TableA.SomeDate, TableB.SomeDate)) < 300
Run Code Online (Sandbox Code Playgroud)