0

我有一个带有 VARCHAR 字段的 mysql 表,该字段以这种格式存储日期dd/mm/yyyy。该表中已经存储了数据,我需要按降序对这些数据进行排序。这可能吗?

4

3 回答 3

4

处理日期的最佳方法是将 then 存储为日期数据类型。

您现在可以轻松地将其中的数据转换为日期列,方法是添加日期数据类型的列,将数据合并到其中,然后重新命名。

alter  yourTable add dateColumnName date;
update yourTable set dateColumnName = STR_TO_DATE(oldDateColumn, '%m/%d/%Y');
drop column oldDateColumn;
alter table yourTable change dateColumnName oldDateColumn date;

如果你这样做,你将能够做各种复杂的日期工作(不仅限于很好地对日期进行排序,或者以不同的格式获取数据 - 还包括计算、比较等等)。您需要注意,您可能还必须更改将数据插入列的方式 - 尽管有许多简单的方法可以将字符串日期从 CSV 或表单转换为适当的日期列。

编辑:正如 Martin 指出的那样,如果您现在存储了一些 bum 数据,则在转换为日期时可能会导致问题,但在进行更新时您可以相当容易地找到这些数据。运行更新...查询后,只需运行以下命令:

select count(*) from yourTable where dateColumnName is null; // Total Problem Count
select * from yourTable where dateColumnName is null; // Detail

这将显示未更新的行

于 2012-09-04T07:57:08.973 回答
0

您需要将该字符串值转换为适当的日期以进行排序:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

就像是:

ORDER BY STR_TO_DATE(date_column, '%d/%m/%Y') DESC
于 2012-09-04T07:54:59.633 回答
0

你不能用 str_to_date mysql 函数 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

未经测试,但应该类似于

select * from table ORDER BY STR_TO_DATE(date,"%e-%c-%Y");
于 2012-09-04T07:55:09.070 回答