带有时间戳的 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