【发布时间】:2011-11-10 02:10:52
【问题描述】:
Postgres 可以使用 date_trunc 函数舍入(截断)时间戳,如下所示:
date_trunc('hour', val)
date_trunc('minute', val)
我正在寻找一种将时间戳截断到最近的 5 分钟边界的方法,例如,14:26:57 变为 14:25:00。直接的方法是这样的:
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
由于这是查询的性能关键部分,我想知道这是否是最快的解决方案,或者是否有一些我忽略的快捷方式(与 Postgres 8.1+ 兼容)。
【问题讨论】:
-
为什么不把它变成一个函数然后索引它,看看它有多快呢?或者只是在完全相同的逻辑上建立索引而不将其包装在索引中。无论哪种方式,您都会知道它的速度有多快。
-
注意,此方法似乎不会向上舍入到“最近”边界,而是将向下舍入到下一个最低边界。即“2017-04-01 00:04:00”似乎舍入到“2017-04-01 00:00:00”,而不是向上到最近边界, 这将是 '2017-04-01 00:05:00'
-
这个操作很快就会用date_bin函数简单得多
标签: sql performance postgresql datetime