0

我看到了一些与我类似的其他问题,但与我的不完全一样。我的一个表中有一个名为 的列time,但是自从新年以来,当我订购时time,它并没有按正确的时间顺序排列,因为年份没有被考虑到排序中。它基本上是按月/天订购的。

所以,我假设我可以执行一个命令,将time当前为 的列转换M/D/Y, hour:minutes:secondsY/M/D, hour:minutes:seconds.

我只是不知道它是什么。

4

3 回答 3

3

你真的应该使用 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()在此期间更改(但不会非常高效)。

于 2013-01-11T21:59:40.550 回答
0

在您的选择中,您可以使用:

 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了解更多详情。

于 2013-01-11T22:01:57.040 回答
0

首先,您应该将此列设置为日期时间列,这样就不会遇到这样的问题,但是因为在清理数据之前您不能这样做。我们将在这里为您进行转换。首先添加一个新的日期时间字段

首先从 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

于 2013-01-11T22:08:38.300 回答