带有时间戳的 postgreSQL 排序

postgreSQL sorting with timestamps

我有以下 SQL 声明:

SELECT * FROM schema."table"
  WHERE "TimeStamp"::timestamp >= '2016-03-09 03:00:05'
  ORDER BY "TimeStamp"::date asc
  LIMIT 15

我希望它做什么?给出 table 的 15 行,其中时间戳与该日期相同且大于该日期,按升序排列。但是 postgres 以错误的顺序发送行。第一项在最后一个位置。 那么有人知道为什么结果如此奇怪吗?

通过将 "TimeStamp" 转换为 date,您将丢弃时间戳的时间部分,因此一天内的所有值都将被视为相等并以随机顺序返回。第一行按您想要的顺序出现是偶然的。

如果时间部分与排序相关,则不要在 ORDER BY 子句中转换为 date

也许您感到困惑,因为 Oracle 的 DATE 类型有时间部分,而 PostgreSQL 没有。

只需使用 ORDER BY "TimeStamp"(到目前为止没有强制转换)。