按日期排序DESC无法在mysql中运行

时间:2014-08-19 22:39:29

标签: mysql sql

我有以下MYSQL表

CREATE TABLE `mytable` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `date` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `timestamp` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `UQ_4242c0a8c07abd9adef59c123f76f3827bb47589` (`date`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

我的查询是:

 select * from `mytable` order by `date` DESC

这不是正确的订购。我做错了什么?

2 个答案:

答案 0 :(得分:4)

问题在于,date将varchar按字典顺序排序,尝试将其转换为日期:

 select * from `mytable` order by STR_TO_DATE(`date`, '%m/%d/%Y') DESC

无论如何,这是一个临时解决方案,您应该修复架构并以适当的格式存储它。

答案 1 :(得分:1)

您应该将日期字段创建为日期数据值

CREATE TABLE `mytable` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`subject` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`date` date DEFAULT NULL,
`timestamp` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `UQ_4242c0a8c07abd9adef59c123f76f3827bb47589` (`date`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci