我在 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 属性中剥离毫秒。
认为 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
然后尝试找出查询中到底发生了什么。如果你不能,发布一个测试用例,你很快就会得到帮助。
| 归档时间: |
|
| 查看次数: |
10206 次 |
| 最近记录: |