Mysql str_to_date不起任何作用
我的数据库中有一个datecreated字段,类型为varchar。不幸的是,我无法将此字段更改为日期格式,因此在选择数据时必须这样做。我试图根据日期对记录进行排序(以便显示最近的年份、月份、日期、小时、分钟和秒)。字段格式类似于dd-mm-yyyy-hh:mm:ss,因此在我的查询中,我尝试以下操作,但它完全不进行排序: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 它
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。我会到处玩,但是,我确信问题出在其他方面。如你的回答所示,问题不在于我的问题。