我在PostgreSQL数据库中有一个表,其中有一个TIMESTAMP WITHOUT TIME ZONE
类型的列。我需要按此列对记录进行排序,显然PostgreSQL在这两个方面都遇到了一些麻烦。
...ORDER BY time_column
和
...ORDER BY time_column DESC
对于具有相同time_column
值的3个元素的记录样本,除了其中的毫秒数之外,给予我相同的元素顺序。
似乎在排序时,它没有考虑值中的毫秒。
我确信毫秒实际上存储在数据库中,因为当我获取记录时,我可以在DateTime
字段中看到它们。
当我首先加载所有记录,然后在内存中按time_column
对它们进行排序时,结果是正确的。
我是否缺少了一些选项来使排序行为正确?
编辑:我显然漏掉了很多,问题不在PostgreSQL,而是在NHibernate剥离了DateTime属性的毫秒数。
3条答案
按热度按时间sycxhyv71#
认为PostgreSQL不能正确排序时间戳是一个愚蠢的想法。运行一个快速测试并保持警惕:
定量
然后试着找出你的查询中到底发生了什么。如果你不能,发布一个测试用例,你会很快得到帮助。
rm5edbpk2#
试着把你的列强制转换为::timestamp,就像这样:
e3bfsja23#
对于那些有类似问题的人,值得检查列的精度级别。
请考虑下表和查询:
和
在单元测试中,一组行被一个接一个地插入(在毫秒内),这将给予不一致的结果。将列改为
TIMESTAMP(6)
而不是0
使其具有更高的精度,因此所有行都可以“一次”插入,并且排序仍然有效。