[英]mysql between dates getting the result
我的mytable中有以下幾行
date_start
-----------
2011-09-20 13:00:00
2011-10-01 13:14:00
2011-10-09 13:16:00
2011-09-27 15:00:00
2011-09-30 14:04:00
2011-10-03 14:00:00
我有這個查詢:
SELECT date_start
FROM `mytable`
WHERE date_start >= "2011-09-19"
AND date_start <= "2011-09-30"
LIMIT 0 , 30
這里的問題是它僅輸出:
2011-09-20 13:00:00
2011-09-27 15:00:00
我期望這個結果:
2011-09-20 13:00:00
2011-09-27 15:00:00
2011-09-30 14:04:00
因為如果我們查看查詢,則應將其作為結果包括在內: 2011-09-30 14:04:00
我在這里做錯了什么?
我還在mysql中使用了BETWEEN
,但輸出仍然相同。
任何幫助將不勝感激和獎勵。
謝謝!
還考慮了時間。 你應該這樣說
SELECT date_start
FROM `mytable`
WHERE date_start >= "2011-09-19"
AND date_start <= "2011-09-30 23:59:59"
LIMIT 0 , 30
假定作為日期時間的日期具有00:00:00小時:分鍾:秒部分。 因此,2011-09-30 14:04:00實際上是> = 2011-09-30。
要執行您想要的操作,請嘗試:
SELECT date_start
FROM `mytable`
WHERE date(date_start) >= "2011-09-19"
AND date(date_start) <= "2011-09-30"
LIMIT 0 , 30
2011-09-30
將被解釋為2011-09-30 00:00:00
。 嘗試將范圍的結尾設置為2011-09-30 23:59:59
,您應該會很好。
就個人而言,我會將日期和時間元素分為兩個單獨的字段date_start
和time_start
,這將使您的查詢能夠按編碼正確工作,並且還允許您執行更復雜和有趣的日期相關活動,例如回答以下問題。
但是,如果您不能對系統的工作方式進行太多更改,則可以在希望過濾的日期前增加一天,然后進行<
而不是<=
比較。
WHERE date_start >= "2011-09-19"
AND date_start < "2011-10-01"
這將比在過濾器中執行DATE(date_start)更快,因為在可索引字段上執行函數時MySQL將無法使用任何索引。
希望能有所幫助。
date_start <= '2011-09-30'
表示包括日期2011-09-30 00:00:00
,但不包括2011-09-30 00:00:01
及更高版本。 您可以使用<
運算符加上常識日期算術來解決:
SELECT date_start
FROM mytable
WHERE date_start >= '2011-09-19'
AND date_start < '2011-09-30' + INTERVAL 1 DAY
LIMIT 0, 30
如果您在查詢中使用between語句,則它將檢索在起始和端點之間的所有記錄。
例如:
SELECT date_start
FROM `mytable`
WHERE date_start between '2011-09-19'and '2011-09-30:23:59:59'
LIMIT 0 , 30
只需按照您的要求嘗試即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.