2012-10-04 110 views
1

我有一列有像2012-09-09 13:20:00這樣的數據,當我嘗試查詢表時,使用以下查詢,它不包含數據迄今爲止。將mySQL的默認時間從00:00:00更改爲23:59:59

Procedure test (IN fromdate date, IN todate date) 

Select * from table where date between fromdate and todate 

比方說,用戶投入到2012-08-102012-09-09,那麼它不包括在9月9日的數據。但是,如果我改變了迄今爲2012-09-10,那麼它將包含數據。似乎沒有時間,mySQL默認爲午夜或00:00:00

有沒有辦法改變它或解決這個問題?比如,在某個階段加入時間(23:59:59)到todate?即使用以下

set todate = todate.STR_TO_DATE("23:59:59"); 

回答

1

您應該使用><運營商而不是BETWEEN,因爲它不包括日期(假設您的列是datetime)。如果您只指定2011-01-31,則相當於2011-01-31 00:00:00

例子:

SELECT * FROM t1 WHERE date > DATE_SUB(fromdate, INTERVAL 1 SECOND) 
    AND date < DATE_ADD(todate, INTERVAL 1 DAY) 

看到它在action

+0

我不確定語法(todate + 1)是否正確,我試過這個,但它不返回任何東西。順便說一句,你是對的,列是日期時間,用戶輸入是日期類型。 – Will

+0

@Will這是僞代碼,請參閱我的實際代碼更新。 – Kermit

+0

非常感謝您的幫助。對不起,我正在愚蠢。 – Will

1

慢 - 強迫列DATE類型:

... WHERE DATE(column_yyyymmddhhmmss) BETWEEN fromdate AND todate 

更快 - 強迫上限爲DATETIME,包括一天的最後一秒:

... WHERE column_yyyymmddhhmmss BETWEEN user_fromdate AND CONCAT(user_todate, '23:59:59'); 
+0

我相信這會禁止有效利用該列的任何索引。 – Kermit

+0

@njk ach!我誤解了問題,交換了列和用戶輸入 – pilcrow

+0

已更新的答案。 – pilcrow