2014-01-16 79 views
0

我有一個關於如何在mysql中排序日期的問題。這可能聽起來很愚蠢,因爲它可以通過order by date asc完成。 在我的表格中,日期實際上是以格式存儲在字符串中的,例如Wed,2014-02-19。 讓我說我有一個如下表。如何在mysql中對日期進行排序?

id | user_id | date 
1 | 38 | Wed,2014-02-19 
2 | 38 | Wed,2014-02-26 
3 | 38 | Wed,2014-02-12 
4 | 38 | Wed,2014-02-05 

像上面的例子中,我仍然可以使用order by date asc因爲所有的日期是週三進行排序。但是,讓我們說一天一個是不同的,如下圖所示,

id | user_id | date 
1 | 38 | Wed,2014-02-19 
2 | 38 | Wed,2014-02-26 
3 | 38 | Thu,2014-02-13 
4 | 38 | Wed,2014-02-05 

MySQL將排序Thu,2014-02-13第一。

無論如何做在MySQL?

+2

使用'正確的'日期字段,那麼這個(和很多東西)會很簡單 – 2014-01-16 03:49:25

+0

如果我存儲所有的日期,使用','爆炸,然後使用array_multisort它可以完成。但是由於代碼相當複雜,並且由另一位退出我公司的程序員開發,我只是儘量不要儘可能地修改代碼。所以我發現它是一種在MySQL中做的方法。 – n3ISe

回答

7

簡單排序逗號後的部分:

order by substring_index(date, ',', -1) 
0

像你使用了錯誤類型的日期列這聽起來我。您是否在日期列中使用DATE或DATETIME或varchar?如果將其切換到DATE,ASC和DESC將正常工作。

參考:http://dev.mysql.com/doc/refman/5.5/en/datetime.html

+0

它是由以前的開發人員開發的。這就是爲什麼他像這樣存儲數據的原因。 – n3ISe

+0

如果可能,我會推薦模式更改。你永遠不應該存儲這樣的值 - 這是非常低效的。您可以使用日期格式化功能以您希望的任何方式表示(DayOfWeek,YY/MM/DD或其他)。 – PressingOnAlways

0

嘗試從字符串轉換日期字段使用STR_TO_DATE功能,像這樣以日期時間:

SELECT id,user_id,STR_TO_DATE(date,'%W,%Y-%m-%d') AS new_date FROM 'table' ORDER BY new_date; 
1

Mysql Date format function & order

你可以有原始日期列日期類型,可以創建日期列的字符串格式作爲別名,並使用原始日期列進行排序。在上面的鏈接中更清楚地給出,希望這有助於。

相關問題