我在PostgreSQL数据库中有一个表,其列为TIMESTAMP WITHOUT TIME ZONE
类型。我需要通过这一列来订购记录,显然PostgreSQL在做这两个方面都有些麻烦
...ORDER BY time_column
和
...ORDER BY time_column DESC
为具有相同time_column
值的3元素记录样本提供相同的元素顺序,除了其中的毫秒数。
似乎在排序时,它不会考虑值中的毫秒数。
我确信毫秒实际上存储在数据库中,因为当我获取记录时,我可以在DateTime
字段中看到它们。
当我第一次加载所有记录然后通过内存中的time_column
对它们进行排序时,结果是正确的。
我是否遗漏了一些使订购行为正确的选项?
编辑:我显然错过了很多。问题不在PostgreSQL中,而是在NHibernate中剥离了DateTime属性的毫秒数。
答案 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。
然后尝试找出您的查询中发生了什么。如果你不能,发布一个测试用例,你就会得到帮助。