2016-01-15 70 views
0

我有一個名爲「Date_Entered」的DateTime列,我需要在兩個日期之間篩選並在這兩個日期之間過濾兩次(時間可能是第二天)。這裏是我的查詢:SQL SERVER 2008在兩個日期和兩次之間篩選

Declare @StartDate DateTime 
Declare @EndDate DateTime 
Declare @StartTime varchar(8) 
Declare @EndTime varchar(8) 

SELECT Date_Entered FROM MyTable 
WHERE (Date_Entered BETWEEN '1/1/2014' AND '1/1/2015') 
AND (CONVERT(varchar(8), Date_Entered, 108) >= '21:00:00' OR @StartTime IS NULL) 
AND (CONVERT(varchar(8), Date_Entered, 108) <= '03:00:00' OR @EndTime IS NULL) --This time value is on the next day to cover a 6-hour period 

期望的結果應該顯示的日期範圍內的所有值(2014年),發生的6小時的範圍內(夜間):

2014-05-15 21:09:00 
2014-08-12 02:45:00 
2014-09-05 01:40:00 

以上所有情況均發生在日期範圍(2014年)以及晚上9點至次日凌晨3點之間。 我的問題是,我需要搜索從下午9點和3AM發生的第二天(對於相同的日期範圍)的時間

如果我搜索時間範圍從21:00到23: 59我得到了結果,但是當第二天時間結束時,我不會得到任何結果。 任何想法如何在SQL中做到這一點。

SSRS 2012用於輸入參數的值。

Date_Entered字段是具有日期和時間的DateTime類型。

+1

編輯你的問題和對提供樣本數據和期望的結果。目前還不清楚爲什麼你有'@ StartDate'包含一個時間組件,然後是一個單獨的時間組件。 –

+0

時間字段還包含日期?或者就像1,2,3 .. 24一樣它是這樣的,那麼今天的日期和明天的日期不會有什麼不同 –

+0

我編輯了我的問題以提供樣本數據。 Date_Entered字段是捕獲日期和時間的DateTime類型。 – user2536008

回答

1

如果我理解正確你的問題,然後下面的代碼會給正確的輸出

create table a 
(enddate datetime 
) 
insert into a values ('2014-05-15 21:09:00') 
insert into a values ('2014-08-12 02:45:00') 
insert into a values ('2014-09-05 01:40:00') 

查詢

SELECT enddate FROM a 
WHERE (enddate BETWEEN '1/1/2014' AND '1/1/2015') 
AND (CONVERT(varchar(8), enddate, 108) >= '21:00:00') 
or (CONVERT(varchar(8), enddate, 108) <= '03:00:00') 

結果

May, 15 2014 21:09:00 
August, 12 2014 02:45:00 
September, 05 2014 01:40:00 
+0

非常感謝您的幫助! – user2536008

+0

高興地幫助你 –

0

是否可以將單獨的日期和時間字段轉換爲單個日期時間字段?這裏是一個相關SO問題的鏈接,它提供了一個選項,可以將您的搜索條件轉換爲單個字段。通過這樣做,它應該讓您在單個查詢內搜索超出午夜的時間。

SQL Server convert string to datetime

+0

它是一個單一的DateTime字段。 – user2536008

+0

他的StartDate和Endate字段將限制他搜索的日期,而不是指示每天搜索的時間範圍。在他的文章中,他從2014年開始每天都在尋找時間。 – DiscipleMichael

相關問題