2013-03-12 231 views
4

我在事件表中有兩列(兩個日期時間)startDate和endDate。 我使用php的date()函數檢索當前日期。兩列之間的Mysql日期時間

此結果以2013-03-12爲例。

現在有活動的日期相結合的三種可能今天發生的:

  1. 事件開始並結束在這一天
  2. 事件已經起步較早今天結束
  3. 事件開始今天但結束在未來(> = 2013-03-13)

現在我想分解成單獨的查詢,因爲我不習慣使用日期。我從第一個查詢開始,但我已經失敗了。我已經試過如下:

SELECT * FROM events WHERE (startDate= '2013-03-12' AND endDate= '2013-03-12') 

藏漢爲:

SELECT * FROM events WHERE NOT (startDate < '2013-03-12' OR endDate > '2013-03-12') 

我試圖用藏漢DATE()和格式化日期,如「2013年3月12日%」。

我不知道爲什麼它不起作用,而我確定至少有一個事件發生在12日。任何幫助表示讚賞。

+0

問題是'datetime'列也包含_time_。 – Barmar 2013-03-12 18:00:46

回答

4

嘗試使用MySQL的DATE()功能修剪日期列的只是日期部分:

SELECT * 
FROM events 
WHERE (DATE(startDate) = '2013-03-12' AND DATE(endDate)= '2013-03-12') 
+0

啊..我在輸入日期使用了DATE()函數! – Gooey 2013-03-12 18:14:45

1

DATETIME數據類型在MySQL認爲一天的時間一樣,所以,它不會匹配任何東西。

如果您沒有任何使用時間部分,那麼您可以簡單地將數據類型簡化爲DATE而不是DATETIME。如果沒有,你可以使用DATE()功能擺脫了時間的一部分,並只考慮日期部分

1

可以使用DATE()功能其他答案建議,但我認爲這使得它很難對使用索引列。相反,您可以在您的比較時間:

SELECT * 
FROM events 
WHERE startDate BETWEEN '2013-03-12 00:00:00' AND 2013-03-12 23:59:59 
    AND endDate BETWEEN '2013-03-12 00:00:00' AND 2013-03-12 23:59:59 
0

時要特別注意在MySQL使用between

date_column_name between 'startDate' AND 'endDate' 

注:你應該要插入+1日期endDate。因爲當你插入2015-05-18日期到endDate。你無法獲得2015-05-18的數據。所以你需要加上一個日期到endDate

相關問題