這裏是我的SQL查詢:按日期排序只能用日,月的MySQL
SELECT uid, title, startTime, endTime, cover FROM event ORDER BY startTime DESC
但是,這會帶給我的元素順序如下:
12/30/2013 00:00
12/25/2013 00:00
01/10/2014 00:00
看起來像它的排序只能用天個月。
你對此有什麼想法嗎?
謝謝。
這裏是我的SQL查詢:按日期排序只能用日,月的MySQL
SELECT uid, title, startTime, endTime, cover FROM event ORDER BY startTime DESC
但是,這會帶給我的元素順序如下:
12/30/2013 00:00
12/25/2013 00:00
01/10/2014 00:00
看起來像它的排序只能用天個月。
你對此有什麼想法嗎?
謝謝。
如果你真的把它們存儲爲字符串,STR_TO_DATE()
應該能夠解決這個問題。
SELECT uid, title, startTime, endTime, cover
FROM event
ORDER BY STR_TO_DATE(startTime, '%m/%d/%Y') DESC
所選日期被存儲爲一個字符串或varchar,這意味着標準格式化或DATETIME
格式完全拋出窗外。
如果您重新格式化列到DATETIME
,你會得到這樣的
2013-12-15 00:00:00
2013-12-30 00:00:00
2014-01-10 00:00:00
你可以看到,最顯著單位是在串順序中的第一行,而最小單位是最後在字符串中,因此允許簡單的排序。
使用@Lars建議有STR_TO_DATE()
功能與排序,你應該運行創建新列後,下面的查詢(我們稱之爲newStartTime
)結構DATETIME
的:
UPDATE event SET newStartTime = STR_TO_DATE(startTime, '%m/%d/%Y %h:%i');
然後最終拋出了startTime
列在您貶低其在您接管的應用程序中的使用情況後。您應該這樣做,因爲字符串到DATETIME
的轉換非常耗時,並且在您處理大型結果集時會導致查詢執行時間過長。
這就是爲什麼你不應該把你的日期存儲爲字符串 –
Unix時間戳也是一個不錯的選擇。 –
什麼類型的字段? –