SQL:检测跨越两个日期之间的时间边界的行

时间:2011-11-29 12:22:24

标签: sql sql-server-2005

问题:

如何检测哪些行具有lastModifiedDate< 30s /分钟的边界< approvedDate 在T-SQL?

背景

我们有一个常规流程(Autonomy的ODBCConnector产品),它扫描我们数据库中的视图,并根据lastModifiedDate字段选取自上次运行以来发生过变化的新闻文章。 这种情况发生在每30秒,分钟和分钟后30分钟。

此过程中存在一个错误,其中一个操作是批准这些文章,这不会导致lastModifiedDate更改,而是更改了approvedDate。

因此,任何经过修改,拾取和批准的文章都不会出现。

对于approvedDate >= DATEADD(second, 30, lastModifiedDate)的文章来说,这总是如此 - 但这并没有找到所有仍然需要拿起的文章。一篇文章的lastModifiedDate可能为28/11/2011 15:48:13,而被批准的日期为28/11/2011 15:48:31,并且该流程无法接收该文章。

注意,approvedDate不一定比lastModifiedDate

更新

1 个答案:

答案 0 :(得分:1)

你的意思是你想要所有的记录,其中被批准的日期在相对于lastModifiedDate所在的30s时间段的下一个30s时间段内?

LastModifiedDate | ApprovedDate | Include In Results?
00:00:00         | 00:00:00     | No
00:00:00         | 00:00:29     | No
00:00:00         | 00:00:30     | Yes
00:00:00         | 00:00:31     | Yes
00:00:00         | 00:01:01     | No?
00:00:29         | 00:00:29     | No
00:00:29         | 00:00:30     | Yes
00:00:29         | 00:00:31     | Yes
00:00:29         | 00:01:01     | No?


如果是这样,试试这个?

WHERE
  DATEDIFF(second, 0, ApprovedDate    ) / 30
  =
  DATEDIFF(second, 0, LastModifiedDate) / 30 + 1


在我提供的原始表格中,No?应该是Yes,试试这个吗?

WHERE
  DATEDIFF(second, 0, ApprovedDate    ) / 30
  >
  DATEDIFF(second, 0, LastModifiedDate) / 30

或者,也许......

WHERE
  ApprovedDate
  >=
  DATEADD(second, 30 - DATEDIFF(second, 0, LastModifiedDate) % 30, lastModifiedDate)