PostgreSQL没有正确排序时间戳列

时间:2012-03-01 12:44:26

标签: postgresql

我在PostgreSQL数据库中有一个表,其列为TIMESTAMP WITHOUT TIME ZONE类型。我需要通过这一列来订购记录,显然PostgreSQL在做这两个方面都有些麻烦

...ORDER BY time_column

...ORDER BY time_column DESC

为具有相同time_column值的3元素记录样本提供相同的元素顺序,除了其中的毫秒数。

似乎在排序时,它不会考虑值中的毫秒数。

我确信毫秒实际上存储在数据库中,因为当我获取记录时,我可以在DateTime字段中看到它们。

当我第一次加载所有记录然后通过内存中的time_column对它们进行排序时,结果是正确的。

我是否遗漏了一些使订购行为正确的选项?

编辑:我显然错过了很多。问题不在PostgreSQL中,而是在NHibernate中剥离了DateTime属性的毫秒数。

1 个答案:

答案 0 :(得分:3)

PostgreSQL无法正确排序时间戳是一种愚蠢的想法。 运行快速测试并确定休息:

CREATE TEMP TABLE t (x timestamp without time zone);

INSERT INTO t VALUES
 ('2012-03-01 23:34:19.879707')
,('2012-03-01 23:34:19.01386')
,('2012-03-01 23:34:19.738593');

SELECT x FROM t ORDER by x DESC;
SELECT x FROM t ORDER by x;

q.e.d。

然后尝试找出您的查询中发生了什么。如果你不能,发布一个测试用例,你就会得到帮助。