簡體   English   中英

日期之間的mysql獲取結果

[英]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_starttime_start ,這將使您的查詢能夠按編碼正確工作,並且還允許您執行更復雜和有趣的日期相關活動,例如回答以下問題。

選擇給定日期范圍內的所有月份,包括值為0的月份

但是,如果您不能對系統的工作方式進行太多更改,則可以在希望過濾的日期前增加一天,然后進行<而不是<=比較。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM