我看到了一些与我类似的其他问题,但与我的不完全一样。我的一个表中有一个名为 的列time
,但是自从新年以来,当我订购时time
,它并没有按正确的时间顺序排列,因为年份没有被考虑到排序中。它基本上是按月/天订购的。
所以,我假设我可以执行一个命令,将time
当前为 的列转换M/D/Y, hour:minutes:seconds
为Y/M/D, hour:minutes:seconds
.
我只是不知道它是什么。
你真的应该使用 MySQL 的时间类型来存储时间数据:
ALTER TABLE my_table
ADD COLUMN new_time DATETIME AFTER time;
UPDATE my_table SET new_time = STR_TO_DATE(time, '%m/%d/%y %H:%i:%s');
ALTER TABLE my_table
DROP time,
CHANGE new_time time DATETIME;
请注意,您也需要更改应用程序代码以使用新的数据格式。
如果您无法更改列数据类型,您可以ORDER BY STR_TO_DATE()
在此期间更改(但不会非常高效)。
在您的选择中,您可以使用:
SELECT DATE_FORMAT('2012-10-10', '%y/%c/%d');
将其更改为您想要的格式。检查http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format了解更多详情。
首先,您应该将此列设置为日期时间列,这样就不会遇到这样的问题,但是因为在清理数据之前您不能这样做。我们将在这里为您进行转换。首先添加一个新的日期时间字段
首先从 m/d/Y 记录中填充日期:
UPDATE table SET new_datetime= STR_TO_DATE(old_datetime, '%m/%d/%y,%H:%i:%s') WHERE autoincrement <= [Last autoincrement value for m/d/y format];
然后从 Y/m/d 记录中填充:
UPDATE table SET new_datetime= STR_TO_DATE(old_datetime, '%y/%m/%d,%H:%i:%s') WHERE autoincrement > [Last autoincrement value for m/d/y format];
然后,您可以删除旧字段。
请注意,您需要确保STR_TO_DATE()
函数中使用的格式与您当前拥有的格式相匹配(例如,我不确定,
您的字符串中是否有文字或所有 2 位数字月/日。您可能需要调整相应的格式模式。有关如何指定格式的信息,请参阅此链接http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format