带有时间戳的 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"
(到目前为止没有强制转换)。
我有以下 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"
(到目前为止没有强制转换)。