PostgreSQL没有正确排列时间戳列
问题描述:
我在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属性的毫秒数。
答
这是一个愚蠢的概念,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。
你能告诉我们一个真实的工作例子吗? – 2012-03-01 13:52:30
我必须承认,我很难相信PostgreSQL无法对内置类型进行排序,这种内置类型已经存在了十多年。 – 2012-03-01 14:54:54
请为无法排序的3元素样本提供表格定义和插入命令。我同意理查德的观点,因为我在数据库中使用'没有时区'的时间戳,并且没有任何问题。 – Matt 2012-03-01 14:59:24