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子句中过滤结果.我意识到这可能会产生一些不准确的结果,但由于数据的存储方式和时间,我不应该遇到任何问题.
有什么建议?
尝试DATEDIFF寻找少于300秒(分钟边界为零秒,这将给出不正确的结果).为了更准确,重要的是,使用毫秒<300000
TableA
LEFT JOIN
TableB ON ABS(DATEDIFF(second, TableA.SomeDate, TableB.SomeDate)) < 300
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6320 次 |
最近记录: |