我有一个带有VARCHAR字段的mysql表,该字段以此格式dd/mm/yyyy
存储日期。该表已经存储了数据,我需要按降序对这些数据进行排序。这可能吗?
答案 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");