2012-06-11 132 views

回答

3

首先,你應該使用標準的日期格式Y-m-d - 否則你必須做一些討厭的查詢和排序是一個真正的b * tch。

使用標準的日期格式,你可以很容易地做這樣的事情:

SELECT * FROM tablename WHERE from_date > '2012-06-11'

0

,如果你使用mysql的DATE()功能會更好

SELECT * FROM tablename WHERE DATE(from_date) > '2012-06-11' 

因爲,如果數據類型您設置爲TIMESTAMP或DATETIME的from_date,那麼當您直接使用'>'符號時,它不會返回正確的結果

+0

真正的'date()'會截斷任何時間值。但是它也可能會阻止數據庫使用該列上的索引。奧利的解決方案是可取的,因爲它是索引友好。 – Leigh

2

DATE比較很可能是你想要的。如果您FROM_DATE列有DATE數據類型,那麼如果你這樣做你的代碼應該是安全可靠:

WHERE from_date = STR_TO_DATE('06/11/2012', '%m/%d/%Y') 

@Repox指出,你可能會考慮把你的日期文字的規範格式「2012- 06-11' 。這是真的,如果你能做到的話。但是,如果您需要,STR_TO_DATE將爲您完成。這裏有%x轉換項目的列表。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

如果您使用的是DATETIME數據類型,請注意:比較比看起來更復雜。 DATETIME項目就像浮點數字:如果其中一個恰好等於另一個,它只是巧合。這是因爲它們代表了時間(毫秒),而不僅僅是幾天。

意味着你的FROM_DATE列有DATETIME類型,你應該使用

WHERE from_date >= STR_TO_DATE('06/11/2012', '%m/%d/%Y') 
    AND from_date < STR_TO_DATE('06/11/2012', '%m/%d/%Y') + INTERVAL 1 DAY 

這將捕獲所有的時刻在時間上你想要的日子,直到但不包括第二天的第一刻。

如果from_date項表示爲字符串,請將其轉換爲DATEDATETIME數據類型。認真。你的結果會好得多。

1
SELECT * from TABLENAME WHERE FROM_DATE='2012/06/13'