MySQL按日期排序奇怪的概率

时间:2012-07-22 12:05:33

标签: 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

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

SELECT * FROM order_list order by date DESC

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

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

3 个答案:

答案 0 :(得分: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;

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

SELECT * FROM order_list ORDER BY date DESC;

如果您无法更改数据库架构,可以在ORDER BY子句中执行STR_TO_DATE操作(但效率不高):

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

答案 1 :(得分:1)

不要那样做。将整个日期放在一列中,然后,如果确实需要,创建将保存年份或日期/月份的计算列。

您可以创建一个简单的脚本,将这两个现有列集成到现有数据库中的一个统一日期列中。

答案 2 :(得分:1)

您可以尝试使用+(SQL SERVER)或CONCAT(MySQL)

SELECT * FROM order_list order by in_date + year DESC