我们有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
答案 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
后,可能会出现以下三种情况之一:
DATEDIFF
函数否定:这意味着A.insertdate
小于B.insertdate
DATEDIFF
函数零:这表示A.insertdate
等于B.insertdate
DATEDIFF
功能介于1-60之间:表示A.insertdate
比B.insertdate
大60秒实际上,您可以根据具体需要更改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)