我一直在更新现有网站.在那里有一个输入表格,它将保存在表格...表格结构和样本数据如下
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)
有什么方法可以做这个动作吗?我尝试了很多查询....任何方式来组合这两行..
我们无法更改数据库,因为它包含更多现有记录.
您应该将日期存储为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_DATE在ORDER BY子句中执行该操作(但这不是非常有效):
SELECT *
FROM order_list
ORDER BY STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y') DESC
Run Code Online (Sandbox Code Playgroud)