2011-06-30 12 views
0

私は2つの異なるテーブルからdatetimesを一致させようとしています。表Aには通常の時間があります(09:29:35)。表Bは、丸められた時間(09:30)を有する。SQL:数分で一致する時間

テーブルBからの時間は、テーブルAからの時間と一致することがあります。または、丸めによって1分前に一致する可能性があります。

これらの時間はどのように一致させることができますか?または、テーブルAから秒を削除してそのテーブルの分を丸めるにはどうしたらいいですか?

事前にお世話になりました!

+0

あなたは切り捨てと切り上げたときの両方と一致するようにしたいですか?テーブルBに09:30と書いたとしよう。表Aのこれらの値のうち一致するものを選択しますか? 09:29:35、09:29:01、09:27:00、09:30:01、09:30:59、09:31:00。また、日付も重要ですか、または日付を完全に無視したいですか?あなたが日付を無視している場合、なぜTIMEではなくDATETIMEを使用していますか? –

+0

申し訳ありませんが説明してください。はい、私はそれらのすべての場合にマッチしたいと思います。私は日付にマッチしたい。 – divided

+0

どちらの側でも1分以内、2分以内に何か他の何かをしたいですか? 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) 
関連する問題