我試圖從兩個不同的表中匹配日期時間。表A有一個固定的時間(09:29:35)。表B有一個四捨五入的時間(09:30)。SQL:幾分鐘的匹配時間
表B的時間可能與表A的時間匹配,或者由於舍入可能與之前的分鐘匹配。
我該如何匹配這些時間?或者,我怎樣才能從表格A中刪除秒鐘,並在該表格上將分鐘捨去呢?
感謝您的幫助!
我試圖從兩個不同的表中匹配日期時間。表A有一個固定的時間(09:29:35)。表B有一個四捨五入的時間(09:30)。SQL:幾分鐘的匹配時間
表B的時間可能與表A的時間匹配,或者由於舍入可能與之前的分鐘匹配。
我該如何匹配這些時間?或者,我怎樣才能從表格A中刪除秒鐘,並在該表格上將分鐘捨去呢?
感謝您的幫助!
您可以用投刪除秒:
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)
如果這些列在其上具有索引,那將是一種遺憾。將它們轉換爲varchar會使索引無用,並會導致表掃描。 –
@Aaron,沒有索引,但感謝您的解釋。 @Andomar - 如果我刪除秒,它會向上還是向下? – divided
刪除該方法截斷的秒數。如果您轉換爲SMALLDATETIME以刪除秒數,它將輪到。 –
SELECT * FROM tableA a
JOIN tableb b
ON a.regulartime between dateadd(minute, -5, b.roundtime)
AND dateadd(minute, +5, b.roundtime)
你想的時候(四捨五入),四捨五入同時匹配?假設表B有09:30。表A中的這些值中的哪一個要表示匹配? 09:29:35,09:29:01,09:27:00,09:30:01,09:30:59,09:31:00。日期也很重要,或者你想完全忽略日期?如果你忽略日期,你爲什麼使用DATETIME而不是TIME? –
對不起,更好的解釋。是的,我想要匹配所有這些情況。我也想在日期上匹配。 – divided
那麼你是否想在任何一方的一分鐘內完成所有的時間,在任何一方的兩分鐘之內,還有其他什麼?那麼09:31:59和09:32:00呢?截止位置在哪裏? –