2014-02-06 77 views
0

我有一個發現4月1日和四月的,看起來像這樣30日之間的所有記錄的查詢:查詢發現兩個日期之間的記錄不工作

SELECT * 
FROM `ar_videos` 
WHERE created 
BETWEEN '2013-04-01' 
AND DATE_ADD( '2013-04-01', INTERVAL 1 
MONTH) 

每當我運行查詢它顯示的記錄從五月份而不是四月份。我的查詢有什麼問題?

+0

除了WHERE子句的格式是可怕的嗎?你是否需要將字符串'2013-04-01''轉換爲適當的類型? 'created'列的類型是什麼? –

+0

「創建」是什麼列類型?您可能需要添加一個月並減去一天以獲得四月的真正「結束」。返回'2013-05-01'。 – tadman

+0

'created'列是日期。 – Nanor

回答

0

你可能想解決您的範圍:

created BETWEEN '2013-04-01' AND DATE_SUB(DATE_ADD('2013-04-01', INTERVAL 1 MONTH), INTERVAL 1 DAY) 

此發現2013-04-012013-04-30之間的事情。請記住,BETWEEN最多並且包括範圍的結尾。

0

你得到你問什麼了:

mysql> select DATE_ADD('2013-04-01', INTERVAL 1 MONTH); 
+------------------------------------------+ 
| DATE_ADD('2013-04-01', INTERVAL 1 MONTH) | 
+------------------------------------------+ 
| 2013-05-01        | 
+------------------------------------------+ 

記住between是一個包容性的比較,

foo BETWEEN bar AND baz 

相同

(bar <= foo) AND (foo <= baz) 

如果你想僅限4月份的記錄,您可以嘗試

WHERE (YEAR(datefield) = 2013) AND (MONTH(datefield) = 4) 

WHERE (datefield >= '2014-04-01') AND (datefield < '2014-05-01') 
               ^--note, <, not <= 
+0

這在技術上是真實的,但對你的數據庫絕對是有害的,因爲這會導致自動錶掃描。 – tadman

相關問題