2013-01-16 114 views
0

我正在使用的MySQL表具有作爲單獨列的日期和時間。時間格式爲"y-m-d""hh:mm:ss"。如果他們在不同的日子裏,我如何在兩次之間搜索行? (例如2013-01-15 12:00:002013-01-17 17:00:00之間的行)MySQL - 在兩個日期/時間之間返回行

現在,我使用的是一個壞的解決方法假設時間差將是最多一個一天,但情況並不總是如此。有可能是一個簡單的方法來完成這一點,但我只是無法弄清楚什麼。謝謝!

+0

您是否可以不改變模式以將列組合成單個'DATETIME'或'TIMESTAMP'類型列? – eggyal

+0

強烈建議您將數據修改爲DATETIME。 – Strawberry

+0

這樣做真的快得多嗎?更改表格需要很長時間,因爲很多機器都使用這種結構寫入數據庫,但如果它真的能起作用,我可能會要求更改。 – user1784397

回答

1

通過首先使用索引來縮小搜索空間,然後將結果修剪到正確的集合,可以加快JW。的回答。

select * from births 
where date between '2013-01-15' and '2013-01-17' -- use index 
and concat(date, ' ', time) between '2013-01-15 12:00:00' and '2013-01-17 17:00:00' 
; 

有關更多詳細信息,請參閱SQL Fiddle

+0

非常感謝你們倆!我使用的表格的確非常大,而且這種索引使它能夠合理地工作。 – user1784397

2

拼接領域使用CONCAT

SELECT * 
FROM tableName 
WHERE CONCAT(dateCol, ' ', timeColumn) BETWEEN 
      '2013-01-15 12:00:00' AND '2013-01-17 17:00:00' 

,但我建議你(如果可能的話)由兩列數據類型DateTime相結合,以便您可以採取的指標的優勢,改變表。以上使用CONCAT的查詢需要full table scan,這對於大型數據庫而言性能非常差。

相關問題