2015-06-25 60 views
0

我也有類似的一個桌上的東西:之間檢索特定日期範圍記錄

ID  SartTime    EndTime    
    1 06-24-2015 08:00 06-24-2015 08:30 
    2 06-24-2015 08:30 06-24-2015 09:00 
    3 06-24-2015 09:00 06-24-2015 09:30 
    4 06-24-2015 09:30 06-24-2015 10:00 

如何實現查詢,在條件在那裏,如果開始和結束時間是 2015年6月24日08:00 06-24-2015 09:00我得到前兩個記錄,並且如果開始和結束時間是06-24-2015 08:00和06-24-2015 09:15,我會得到前三個記錄。另外在條件下如果開始和結束時間是06-24-2015 08:15和06-24-2015 09:15我需要得到前三個記錄

感謝您的幫助提前。

回答

0
Declare @starttime datetime = '6-24-15 08:00:00' 
Declare @endtime datetime = '6-24-15 09:00:00' 

Select * from MyTable 
where StartTime <= @endtime and endtime >= @starttime 

更改前兩行以根據需要調整搜索窗口。另外,我假設你的專欄實際上是starttime,而不是sarttime - 如果我在這個猜測中錯了,代碼可能需要調整。

根據項目的要求,您可能需要調整>=>

+0

這工作,非常感謝。 – user2502961

0

我沒有看到正在使用指定哪個平臺,因此告誡說,以下適用於MSSQL服務器。

如果您的「StartTime」和「EndTime」列被定義爲SQL中的日期時間類型,那麼服務器將完成將查詢轉換爲適當類型的繁重工作。在這裏,您可能只需在您的WHERE子句中使用普通>,< =運算符(如果您非常喜歡,則可以使用BETWEEN),以完成您期望的操作。

就問題的第二部分而言,如果您基本上希望在結束時間中包含(可選)15分鐘「滯後」,並在開始時間中包含15分鐘「推」,則可以使用DATEADD做這樣的事情:

SELECT * FROM [myTable] 
WHERE 
(StartTime >= @startTime AND EndTime <= @endTime) OR 
(StartTime >= @startTime AND DATEADD(minute, -15, EndTime) <= @endTime) OR 
(DATEADD(minute, 15, StartTime) >= @startTime AND EndTime <= @endTime) OR 
(DATEADD(minute, 15, StartTime) >= @startTime AND DATEADD(minute, -15, EndTime) <= @endTime) 

這當然只是如果您的數據僅是全部或半小時爲單位來表示是有道理的。

Google文檔DATEADD如下:

https://msdn.microsoft.com/en-us/library/ms186819.aspx

希望這有助於!

相關問題