2017-03-15 6 views
1

レコードを2つのテーブルに挿入するSSISジョブがあります。私がInsertDateを見ると、10〜20ミリ秒の時間差があります。時差を受け入れるSQLクエリ

私はInsertDateに基づいて2つのテーブルを比較する必要がありますが、比較すると、その差が60秒未満であれば無視する必要があります。

Ex: 
2017-03-15 06:09:59.930 
2017-03-15 06:10:50.030 

Select * from A 
inner join B 
on A.ID = B.ID 
Where A.insertdate < B.inserdate 

答えて

4

は、SQL Server 2008のため、サポートDATEDIFF functionを使用してください:あなたのクエリを作る

DATEDIFF (datepart , startdate , enddate) 

SELECT * FROM A 
INNER JOIN B 
    ON A.ID = B.ID 
WHERE DATEDIFF(second, A.insertdate, B.insertdate) < 60 

second引数は、2つの日付の差を秒単位で計算します。 DATEDIFF(...) < 60のチェック与え、3次のシナリオのいずれかが存在することができる。

  1. DATEDIFF機能は:この:これはA.insertdate未満B.insertdate
  2. DATEDIFF関数がゼロであることを意味しますA.insertdateB.insertdate と等しいことを意味する。DATEDIFFは、1-60の間であることを意味する。A.insertdate効果的B.insertdate

より大きく60秒件までで、次のような特定のニーズに基づいてDATEDIFF機能に対するチェックを変更することができます:DATEDIFF(...)A.insertdateが60秒前件までであることを保証-60の間および0であることを確認B.insertdateよりも大きくはありません。

注:以前のバージョンの質問の結合条件はA.insertdate = B.insertdateで、結果としてDATEDIFFという式がDATEDIFF(second, A.insertdate, B.insertdate) BETWEEN -60 AND 60となっています。

+1

私はこれが私の答えよりも好きです。 –

+0

ありがとうございます。 where節で同じ条件をチェックすることは可能ですか? 例: Select * from A 内部結合B ここで、A.Inserdate> B.insertdate –

+0

@Ask_SO - 質問の修正クエリに基づいて答えを更新しました。これはWHERE A.insertdate Phylyp

2

あなたがそれらに参加する前に、日時を切り上げることができます。

SELECT * 
FROM A 
JOIN B 
    ON CAST(A.insertdate AS smalldatetime) = 
     CAST(B.insertdate AS smalldatetime) 
関連する問題