Mysql str_to_date不起任何作用

Mysql str_to_date不起任何作用,mysql,str-to-date,Mysql,Str To Date,我的数据库中有一个datecreated字段,类型为varchar。不幸的是,我无法将此字段更改为日期格式,因此在选择数据时必须这样做。我试图根据日期对记录进行排序(以便显示最近的年份、月份、日期、小时、分钟和秒)。字段格式类似于dd-mm-yyyy-hh:mm:ss,因此在我的查询中,我尝试以下操作,但它完全不进行排序: SELECT * FROM submissions ORDER BY str_to_date(datecreated,'%d-%m-%Y %H:%i:%s') DESC 它

我的数据库中有一个datecreated字段,类型为varchar。不幸的是,我无法将此字段更改为日期格式,因此在选择数据时必须这样做。我试图根据日期对记录进行排序(以便显示最近的年份、月份、日期、小时、分钟和秒)。字段格式类似于dd-mm-yyyy-hh:mm:ss,因此在我的查询中,我尝试以下操作,但它完全不进行排序:

SELECT * FROM submissions ORDER BY str_to_date(datecreated,'%d-%m-%Y %H:%i:%s') DESC

它所做的只是根据id字段显示记录…

假设所有的
datecreated
值与您指定的格式匹配,该查询应该可以工作

下面的示例显示了您的查询在MySQL 5.6.14中正常工作,使用了过去4年中分布的10个随机日期:

设置:

mysql> create table submissions (
    -> id int not null auto_increment primary key,
    -> datecreated varchar(20)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> 
mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into submissions (datecreated) select date_format(now() - interval (rand() * 31536000 * 4) second,'%d-%m-%Y %H:%i:%s');
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
查询:

mysql> SELECT * FROM submissions ORDER BY str_to_date(datecreated,'%d-%m-%Y %H:%i:%s') DESC;
+----+---------------------+
| id | datecreated         |
+----+---------------------+
|  3 | 16-11-2013 10:36:23 |
| 10 | 23-03-2013 23:04:52 |
|  4 | 02-08-2012 08:02:59 |
|  1 | 13-06-2012 21:52:34 |
|  7 | 02-10-2011 05:59:49 |
|  9 | 22-07-2011 14:04:19 |
|  2 | 04-07-2011 03:09:08 |
|  8 | 03-06-2011 03:55:04 |
|  6 | 06-01-2011 20:50:50 |
|  5 | 05-01-2011 20:54:16 |
+----+---------------------+
10 rows in set (0.00 sec)

如果您删除DESC怎么办?不是我们不信任您,而是我们希望看到相同的样本数据和样本输出。@Mihai,它也这么做,只是忽略了它。@lvaroG.Vicario,我看看我能做些什么……如果您不能更改它,您可能希望以本机
DATETIME
格式创建第二列,这样就不必每次都执行这种昂贵的操作。在非平凡的数据集上执行此操作将非常缓慢,因为无法为此索引This.Thx。我会到处玩,但是,我确信问题出在其他方面。如你的回答所示,问题不在于我的问题。