我有以下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
这不是正确的订购。我做错了什么?
答案 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