订购由mysql中的日期组成的VARCHAR字段

时间:2012-09-04 07:52:17

标签: php mysql

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

3 个答案:

答案 0 :(得分:4)

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

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

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指出的那样,如果您现在存储了一些流量数据,那么在转换为日期时可能会出现问题,但您可以在进行更新时轻松找到这些数据。运行 update ... 查询后,只需运行以下命令:

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

这将显示未更新的行

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

答案 2 :(得分: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");