15

在尝试按时间戳值对某些结果进行排序时,我遇到了一个问题。

我希望这些结果根据时间戳值从最新到最旧显示。

因此,为了解释这一点,假设有 3 个结果:

2012-07-11 17:34:57
2012-07-11 17:33:28
2012-07-11 17:33:07

这个结果集将是我所需要的,但给出以下查询

SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC

我得到:

2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28

这是因为它按数值排序并排07在前面28

如果我按降序排序,我得到

2012-07-11 17:33:07
2012-07-11 17:33:28
2012-07-11 17:34:57

这就是我正在寻找的......但它是相反的。

所以我的问题很简单,我怎么能像我描述的那样按升序对这些值进行排序?

编辑:

问题

编辑2:

CREATE TABLE `user_quotations` (
 `id` int(100) NOT NULL AUTO_INCREMENT,
 `quoteNumber` int(100) NOT NULL,
 `lastModified` datetime NOT NULL,
 `userId` int(100) NOT NULL,
 `manufacturer` varchar(250) COLLATE latin1_general_ci NOT NULL,
 `modelNumber` varchar(250) COLLATE latin1_general_ci NOT NULL,
 `productDesc` varchar(1000) COLLATE latin1_general_ci NOT NULL,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 KEY `quoteNumber` (`quoteNumber`,`lastModified`,`userId`,`manufacturer`,`modelNumber`,`timestamp`),
 KEY `productDesc` (`productDesc`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
4

4 回答 4

19

您的查询 :

SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC;

是完美的。但我怀疑您在帖子中提供的结果。您发布了:

2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28

但是你的 sqlbox 中的结果显示:

2012-07-11 17:34:57
2012-07-15 17:33:07
2012-07-15 17:33:28

这是完全正确的。

这是您发帖中的拼写错误吗?
如果没有,请尝试以下操作:

SELECT timestamp( `timestamp` ) as 'timestamp'
FROM randomTable
ORDER BY 1 ASC;
于 2012-07-15T16:53:02.750 回答
4

检查表的创建语句。我希望您的时间戳列确实是一个字符串。

Show create table tablename;
于 2012-07-15T16:20:27.227 回答
1

如果您将查询编写为:

select q.`timestamp`
from user_quotations as q
order by q.`timestamp`
limit 30

您应该正确订购它们。

如果不是,则时间戳数据有问题。寻找前导/尾随空格、奇数字符等。

于 2012-07-15T16:30:52.380 回答
1

屏幕截图显示了 15 日的两个结果和 11 日的一个结果。可能会稍微影响订单。

于 2014-09-29T05:38:27.597 回答