2011-06-30 61 views
0

我試圖從兩個不同的表中匹配日期時間。表A有一個固定的時間(09:29:35)。表B有一個四捨五入的時間(09:30)。SQL:幾分鐘的匹配時間

表B的時間可能與表A的時間匹配,或者由於舍入可能與之前的分鐘匹配。

我該如何匹配這些時間?或者,我怎樣才能從表格A中刪除秒鐘,並在該表格上將分鐘捨去呢?

感謝您的幫助!

+0

你想的時候(四捨五入),四捨五入同時匹配?假設表B有09:30。表A中的這些值中的哪一個要表示匹配? 09:29:35,09:29:01,09:27:00,09:30:01,09:30:59,09:31:00。日期也很重要,或者你想完全忽略日期?如果你忽略日期,你爲什麼使用DATETIME而不是TIME? –

+0

對不起,更好的解釋。是的,我想要匹配所有這些情況。我也想在日期上匹配。 – divided

+0

那麼你是否想在任何一方的一分鐘內完成所有的時間,在任何一方的兩分鐘之內,還有其他什麼?那麼09:31:59和09:32:00呢?截止位置在哪裏? –

回答

1

您可以用投刪除秒:

convert(varchar(16), getdate(), 120) 

這砍下秒後的日期,F.E. 2011-06-30 19:50(16個字符長)。使用dateadd可以添加或減去分鐘數。

如果您在加入,你喜歡的東西結合起來:

select * 
from TableA 
join TableB 
on  convert(varchar(16), TableA.DateColumn, 120) between 
     convert(varchar(16), dateadd(m,-1,TableB.DateColumn), 120) 
     and convert(varchar(16), dateadd(m,1,TableB.DateColumn), 120) 
+0

如果這些列在其上具有索引,那將是一種遺憾。將它們轉換爲varchar會使索引無用,並會導致表掃描。 –

+0

@Aaron,沒有索引,但感謝您的解釋。 @Andomar - 如果我刪除秒,它會向上還是向下? – divided

+0

刪除該方法截斷的秒數。如果您轉換爲SMALLDATETIME以刪除秒數,它將輪到。 –

2
SELECT * FROM tableA a 
JOIN tableb b 
ON a.regulartime between dateadd(minute, -5, b.roundtime) 
AND dateadd(minute, +5, b.roundtime) 
相關問題