带有时间戳的 postgreSQL 排序

Posted

技术标签:

【中文标题】带有时间戳的 postgreSQL 排序【英文标题】:postgreSQL sorting with timestamps 【发布时间】:2016-07-19 11:30:43 【问题描述】:

我有以下 SQL 语句:

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

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

【问题讨论】:

如果您可以将其写为答案,我可以将其标记为正确答案并给您 +1。 因为您将字段Timestamp转换为date data_type,它不关心time(hh:mm:ss) 信息。尝试订购而不投射 【参考方案1】:

只使用ORDER BY "TimeStamp"(不强制转换为日期)。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于带有时间戳的 postgreSQL 排序的主要内容,如果未能解决你的问题,请参考以下文章

将包含 PostgreSQL 时间戳的 QString 转换为 QDateTime

PostgreSQL:为所有行创建具有唯一时间戳的表

在 PostgreSQL 中使用带时间戳的 BETWEEN

PostgreSQL 中基于时间戳的移动平均线

我应该使用复合主键来加速 PostgreSQL 中基于时间戳的选择吗?

PostgreSQL:在不同时区的时间戳中添加间隔