2014-02-20 103 views
0

比方說,我有一個這樣的表:如何搜索在SQL Server 2012中的日期超過兩列

Event (eventID, StartDateTime, EndDateTime) 
  • StartDateTimedatetime數據類型
  • EndDateTimedatetime數據類型

現在樣本數據可能如下:

EventID StartDateTime    EndDateTime 
----------------------------------------------------------- 
    1  2014-02-21 00:00:00.000 2014-02-23 23:59:59.000 
    2  2014-02-22 00:00:00.000 2014-02-24 23:59:59.000 

我要搜索什麼樣的事件在2014-02-23 00:00:00.000

SELECT 
* 
FROM 
    Event 
WHERE 
    (StartDateTime <= '2/23/2013 00:00:00 AM') 
    OR (EndDateTime >= '2/23/2013 00:00:00 AM') 

我已經嘗試了上面的代碼正在發生,但它不返回正確的結果。

我錯過了什麼嗎?你能告訴我我錯過了什麼嗎?

+0

從startdatime到enddatetime之間的'2/23/2013 00:00:00 AM'事件select * from event事件不正確?如果我記得它不包含在內,你可能需要添加一點到enddate的原因 –

回答

1

使用此查詢

SELECT * FROM Event 
    WHERE '2014-02-23 00:00:00.000' BETWEEN StartDateTime and EndDateTime 
0

在WHERE子句中使用Between運算符。它指定了一個測試範圍。

  • BETWEEN運營商是包容性的邊界情況。

    BETWEEN如果test_expression的值大於或等於begin_expression的值並且小於或等於end_expression的值,則返回TRUE。

1

你試過了嗎?

DECLARE @EventTime DATETIME 
SET @EventTime = '20140223 00:00:00' 

SELECT * 
FROM EVENT 
WHERE @EventTime BETWEEN StartDateTime AND EndDateTime 
+0

不會返回任何東西! –

+0

嘗試設置@EventTime ='20130223 00:00:00' – Weissvonnix

+0

您的Sampledata包含2014年的條目...嘗試設置@EventTime ='20140223 00:00:00';-) – Weissvonnix

2

你不想OR,你想AND。你想要的日期前或啓動活動指定,您指定的日期之後結束:

SELECT 
* 
FROM 
    Event 
WHERE 
    StartDateTime <= '20130223' 
    AND 
    EndDateTime > '20130223' 

另外,我會認真地建議你開始儲存這些日期範圍爲半開放式間隔,如果時間部分很重要,則使用獨家結束日期。這是一個更容易計算獨家終點,即閱讀更乾淨:

INSERT INTO Event(EventID,StartDateTime,EndDateTime) values 
(1,'2014-02-21T00:00:00.000','2014-02-24T00:00:00.000'), 
(2,'2014-02-22T00:00:00.000','2014-02-25T00:00:00.000') 

其優點,它不是(任意)不含當日的最後一刻,作爲當前範圍做。

+0

如何將'2014-02 -21 00:00:00.000'到20140221在sql server 2012? –