SQL Query接受时差

时间:2017-03-15 11:53:49

标签: sql-server sql-server-2008 sql-server-2008-r2

我们有SSIS作业,将记录插入两个表。当我看到InsertDate时,有10到20毫秒的时差。

我需要根据InsertDate比较两个表,但是比较时应忽略差异是否小于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

2 个答案:

答案 0 :(得分:5)

使用自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参数计算两个日期之间的差异,以秒为单位。检查DATEDIFF(...) < 60后,可能会出现以下三种情况之一:

  1. DATEDIFF函数否定:这意味着A.insertdate小于B.insertdate
  2. DATEDIFF函数:这表示A.insertdate等于B.insertdate
  3. DATEDIFF功能介于1-60之间:表示A.insertdateB.insertdate大60秒
  4. 实际上,您可以根据具体需要更改DATEDIFF功能的检查,例如:检查DATEDIFF(...)介于-60和0之间,确保A.insertdate最多为60早于B.insertdate的秒,但不是更多。

    注意:问题的早期版本的加入条件为A.insertdate = B.insertdate,导致DATEDIFF表达式为DATEDIFF(second, A.insertdate, B.insertdate) BETWEEN -60 AND 60

答案 1 :(得分:2)

您可以在加入之前对日期时间进行舍入:

SELECT *
FROM   A
JOIN   B
    ON CAST(A.insertdate AS smalldatetime) =
       CAST(B.insertdate AS smalldatetime)