我有一個發現4月1日和四月的,看起來像這樣30日之間的所有記錄的查詢:查詢發現兩個日期之間的記錄不工作
SELECT *
FROM `ar_videos`
WHERE created
BETWEEN '2013-04-01'
AND DATE_ADD( '2013-04-01', INTERVAL 1
MONTH)
每當我運行查詢它顯示的記錄從五月份而不是四月份。我的查詢有什麼問題?
我有一個發現4月1日和四月的,看起來像這樣30日之間的所有記錄的查詢:查詢發現兩個日期之間的記錄不工作
SELECT *
FROM `ar_videos`
WHERE created
BETWEEN '2013-04-01'
AND DATE_ADD( '2013-04-01', INTERVAL 1
MONTH)
每當我運行查詢它顯示的記錄從五月份而不是四月份。我的查詢有什麼問題?
你可能想解決您的範圍:
created BETWEEN '2013-04-01' AND DATE_SUB(DATE_ADD('2013-04-01', INTERVAL 1 MONTH), INTERVAL 1 DAY)
此發現2013-04-01
和2013-04-30
之間的事情。請記住,BETWEEN
是最多並且包括範圍的結尾。
你得到你問什麼了:
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 <=
這在技術上是真實的,但對你的數據庫絕對是有害的,因爲這會導致自動錶掃描。 – tadman
除了WHERE子句的格式是可怕的嗎?你是否需要將字符串'2013-04-01''轉換爲適當的類型? 'created'列的類型是什麼? –
「創建」是什麼列類型?您可能需要添加一個月並減去一天以獲得四月的真正「結束」。返回'2013-05-01'。 – tadman
'created'列是日期。 – Nanor