【问题标题】:postgreSQL sorting with timestamps带有时间戳的 postgreSQL 排序
【发布时间】: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) 信息。尝试订购而不投射

标签: postgresql postgresql-9.4


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-27
      • 2014-01-24
      • 1970-01-01
      • 2016-10-09
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多