我有这样的查询,很好地生成两个给定日期之间的一系列日期:
select date '2004-03-07' + j - i as AllDate
from generate_series(0, extract(doy from date '2004-03-07')::int - 1) as i,
generate_series(0, extract(doy from date '2004-08-16')::int - 1) as j
Run Code Online (Sandbox Code Playgroud)
它在2004-03-07和之间生成162个日期2004-08-16,这就是我想要的.这段代码的问题是,它不会得到正确的答案时,这两个日期都不同年份,例如,当我尝试2007-02-01和2008-04-01.
有更好的解决方案吗?
Postgres可以使用date_trunc函数对时间戳进行舍入(截断),如下所示:
date_trunc('hour', val)
date_trunc('minute', val)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法将时间戳截断到最近的5分钟边界,例如,14:26:57变为14:25:00.直截了当的方式是这样的:
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
Run Code Online (Sandbox Code Playgroud)
由于这是查询的性能关键部分,我想知道这是否是最快的解决方案,或者是否有一些我忽略的快捷方式(与Postgres 8.1+兼容).