2014-04-15 88 views
0

我的数据库中有一个datecreate字段,它的类型是varchar。不幸的是,我不能将该字段更改为日期格式,所以在选择数据时我必须这样做。我试图根据日期对记录进行排序(以便显示最新的一年然后一个月,然后一天然后一小时然后几分钟然后秒)。字段格式是这样的DD-MM-YYYY HH:mm:ss的,所以我的查询中,我尝试以下,但它也绝对没有顺序可言:Mysql str_to_date什么都不做

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

它所做的就是显示根据ID字段的记录...

+0

如果删除DESC会怎么样? – Mihai

+1

并不是我们不相信你,但我们希望看到相同的样本数据和样本输出。 –

+0

@Mihai,它也是这样,只是忽略它而已。 – Janpan

回答

1

假设所有的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) 
+0

Thx为此。然而,我会玩弄,但我确信其他问题是存在的。如你的答案所示,问题不在于我的查询。 – Janpan