0

我一直在更新现有网站。在那有一个条目表格,它将保存在表格中...表格结构和示例数据如下

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

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

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

4

3 回答 3

5

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

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;

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

SELECT   *
FROM     order_list
ORDER BY STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y') DESC
于 2012-07-22T12:13:37.923 回答
1

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

SELECT * FROM order_list order by in_date + year DESC
于 2012-07-22T12:14:40.680 回答
1

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

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

于 2012-07-22T12:08:45.870 回答