2014-09-05 56 views
0

我想在用戶輸入的兩個特定日期之間的數據庫中查找日期。喜歡的東西:比較SQL中的日期返回錯誤的記錄

選擇日期FROM表WHERE日期> = dateFrom和日期< = dateTO

我下面的表格有:

enter image description here

我犯了一個錯誤保存日期爲VARCHAR現在我必須做所有的str_to_date和date_format,因爲我使用的是phpMyAdmin。我不知怎麼搞的,但我使用此查詢面臨這個奇怪的問題:

SELECT date_format(str_to_date(data,'%d/%m/%Y'),'%d/%m/%Y') AS data FROM montaggio WHERE data>=date_format(str_to_date('29/08/2014','%d/%m/%Y'),'%d/%m/%Y') 

查詢將返回我只有日期19/08/2014這裏,我希望它返回01/09/2014。另一方面,如果它輸入查詢

SELECT date_format(str_to_date(data,'%d/%m/%Y'),'%d/%m/%Y') AS data FROM montaggio WHERE data>=date_format(str_to_date('29/08/2014','%d/%m/%Y'),'%d/%m/%Y') AND data<=date_format(str_to_date('05/09/2014','%d/%m/%Y'),'%d/%m/%Y') 

該查詢不會返回任何內容。

我正在使用phpMyAdmin。 我在這裏失蹤了什麼?任何幫助,將不勝感激!

+0

[使用BETWEEN調用數據時獲取額外的數據]可能的重複(http://stackoverflow.com/questions/25678714/getting-extra-data-while-calling-data-using-between-for-date ) – Murtaza 2014-09-05 10:52:56

+0

PLease在這裏看到我的答案,如果你想解決SQL - http://stackoverflow.com/questions/25678714/getting-extra-data-while-calling-data-using-between-for-date/25679235#25679235 – Murtaza 2014-09-05 10:53:12

+4

這就是我們將日期存儲爲日期的原因。你真的需要修改你的表格定義,然後你就不會有這個問題。 – gvee 2014-09-05 10:53:14

回答

1

你確實有點困惑。日期上的所有操作應在日期數據類型上完成。有沒有需要的東西轉換回字符串:

SELECT data 
FROM montaggio 
WHERE str_to_date(data, '%d/%m/%Y') >= str_to_date('29/08/2014', '%d/%m/%Y') 

你似乎明白了真正的解決方案,這是日期/時間存儲在使用正確類型的數據庫。如果你必須爲日期使用字符串,那麼總是將它們存儲爲YYYY-MM-DD,因此比較和排序將正確工作。

+0

我正在努力做出這些改變,我只想看看我是如何處理字符串的。學習階段... :)儘管謝謝你的建議。 – 2014-09-05 11:23:25