2012-03-01 93 views
3

我在PostgreSQL数据库中有一列表,其列号为TIMESTAMP WITHOUT TIME ZONE类型。我需要在此列订购的记录,显然PostgreSQL有一些麻烦,这样做既是PostgreSQL没有正确排列时间戳列

...ORDER BY time_column 

...ORDER BY time_column DESC 

给我的有记录我的3个元素样元素的顺序相同相同的time_column值,但其中的毫秒数除外。

看来,虽然排序,它不会考虑毫秒的价值。

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

当我第一次加载所有记录,然后在内存中按time_column排序时,结果是正确的。

我是否错过了一些让订单行为正确的选项?

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

+1

你能告诉我们一个真实的工作例子吗? – 2012-03-01 13:52:30

+1

我必须承认,我很难相信PostgreSQL无法对内置类型进行排序,这种内置类型已经存在了十多年。 – 2012-03-01 14:54:54

+0

请为无法排序的3元素样本提供表格定义和插入命令。我同意理查德的观点,因为我在数据库中使用'没有时区'的时间戳,并且没有任何问题。 – Matt 2012-03-01 14:59:24

回答

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.

然后试着找出你的查询中发生了什么。如果你不能,发布一个测试用例,你会被帮助presto pronto。