2011-11-29 118 views
0
該行跨時空的界限

問:SQL:檢測兩個日期之間

如何檢測哪些行有lastModifiedDate <邊界在30秒/分鐘< approvedDate 在T-SQL?

背景:

我們有一個經常程序(Autonomy的ODBCConnector產品),它會掃描我們的數據庫視圖,並拿起自從上次運行的基礎上,lastModifiedDate領域已改變的新聞文章。 這種情況每隔三十秒鐘發生,一分鐘一分鐘,一分鐘後三十秒鐘發生。

在這個過程中有一個錯誤,其中一個操作是批准這些文章,並且不會導致lastModifiedDate更改,而是更改approvedDate。

因此,任何被修改,拾取和批准的文章都不會顯示出來。

這對於那些approvedDate >= DATEADD(second, 30, lastModifiedDate)的文章來說總是如此 - 但是這並不代表所有仍然需要提取的文章。一篇文章可能有28/11/2011 15:48:13的最後修改日期和28/11/2011 15:48:31的批准日期,並且不會被過程挑選出來。

NB的approvedDate不一定比lastModifiedDate

+0

這一切意味着您需要選擇要麼一)lastModifiedDate在最後30秒的所有文章,或b)approvedDate在最後30秒? –

+0

這意味着我需要所有記錄,其中ApprovedDate是a)在lastModifiedDate之後,並且b)它們之間有30秒標記。例如lastModified:00:00:29 approvedDate:00:00:31或lastModified:00:00:29 approvedDate:00:01:31都應包含在結果集中。 – penguat

回答

1

你的意思是你想要的所有記錄中,其中approvedDate是相對於時間的lastModifiedDate是在上世紀30年代塊時間的下一個30年代塊更近?

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) 
+1

@penguat:我對'%'的一些使用是僞造的。我已將其更改爲'/'在適當的位置:) – MatBailie

+0

這不起作用:消息535,級別16,狀態0,行1 兩個日期時間列的差異導致運行時溢出。 – penguat

+0

也許我需要投我的專欄(DATETIMEs,他們兩個)時間? (並處理潛在的不同日期) – penguat