2012-10-10 150 views
0

我們有一個表來存儲事件。根據日期選擇查詢

表已經得到了像

EventID INT Primary Key 
EventName NVARCHAR(100) 
StartDate Datetime 
EndDate Datetime 

一個架構,以便在前端,我們要顯示按照開始時間和結束時間的事件。 從前端我們傳遞StartDate和EndDate作爲參數來取值。

到目前爲止,我們已經採取了類似

Select * from tbl_Events 
    where ((startDate BETWEEN @start AND @end) OR (EndDate BETWEEN @start AND @end)) 

我們有2次顯示的事件 -

  1. 一個月視圖 - 這顯示所有事件在一個月

  2. A 日視圖顯示當天事件

想我2012年10月

得到了與起始日期事件截至2012年10月23日期和結束日期爲27,我路過@StartDate as 24 Oct 2012@EndDate as 25 OCt 2012

根據上面的查詢其工作在月查看。但它不在日視圖中工作。

誰能請幫助我在此修改查詢

+1

嘗試使用**語言無關的**格式的日期 - 即** SQL Server中的ISO-8601 **格式 - 'YYYYMMDD'。因此,請嘗試使用@StartDate ='20121024'和'@EndDate ='20121027'。另外 - 如果你使用'DateTime'作爲結束日期,那麼你需要使用''2012-10-27T23:59:59.997''作爲你的「結束日期」 - 否則你將不會得到任何預定的事件在10月27日的那一天。 –

+0

或更正確地說'... JimmyB

+0

@marc_s:k..yes我是節省時間與..我認爲它與時間格式無關,如果我通過'@StartDate作爲20121024'和'@EndDate作爲20121025',那麼此查詢也不會返回任何東西.. –

回答

2

你的重疊邏輯真的應該是:

Select * 
from tbl_Events 
where startDate <= @end AND @start <= EndDate 
+0

不是。因爲原件不允許兩個表格列超出範圍。 – RichardTheKiwi

+0

當然,你是對的:o) – JimmyB