PostgreSQL 没有正确排序时间戳列

two*_*wer 5 postgresql

我在 PostgreSQL 数据库中有一个表,其中有一列类型TIMESTAMP WITHOUT TIME ZONE。我需要按此列对记录进行排序,显然 PostgreSQL 在执行此操作时遇到了一些麻烦

...ORDER BY time_column
Run Code Online (Sandbox Code Playgroud)

...ORDER BY time_column DESC
Run Code Online (Sandbox Code Playgroud)

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

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

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

当我首先加载所有记录,然后按time_column内存排序时,结果是正确的。

我是否缺少一些使排序行为正确的选项?

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

Erw*_*ter 6

认为 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;
Run Code Online (Sandbox Code Playgroud)

qed

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