MySQL按日期排序奇怪的概率

ram*_*esh 0 mysql sql-server

我一直在更新现有网站.在那里有一个输入表格,它将保存在表格...表格结构和样本数据如下

id  |  name       | type    |  in_date     |  year   
-----------------------------------------------------
1   |  name1      | 1       |  2-July      |  2011
2   |  name2      | 2       |  2-June      |  2011
3   |  name44     | 2       |  8-Sep       |  2011
Run Code Online (Sandbox Code Playgroud)

现在我需要整个日期顺序(即2011年6月2日)作为一个简单的查询来订购此表

SELECT * FROM order_list order by date DESC
Run Code Online (Sandbox Code Playgroud)

有什么方法可以做这个动作吗?我尝试了很多查询....任何方式来组合这两行..

我们无法更改数据库,因为它包含更多现有记录.

egg*_*yal 5

您应该将日期存储为MySQL DATE类型,而不是字符串:

ALTER TABLE order_list ADD COLUMN new_date DATE;

UPDATE order_list
SET new_date = STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y');

ALTER TABLE order_list DROP COLUMN in_date, DROP COLUMN year;
Run Code Online (Sandbox Code Playgroud)

然后订购变得微不足道(即将完全按照您的尝试工作):

SELECT * FROM order_list ORDER BY date DESC;
Run Code Online (Sandbox Code Playgroud)

如果您无法更改数据库架构,则可以STR_TO_DATEORDER BY子句中执行该操作(但这不是非常有效):

SELECT   *
FROM     order_list
ORDER BY STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y') DESC
Run Code Online (Sandbox Code Playgroud)