Вы можете сделать это как простой оператор SQL, заменив CURRENT_TIMESTAMP на значение TIMESTAMP.
SELECT date_trunc('minute', CURRENT_TIMESTAMP::timestamp without time zone)
+ (
CASE WHEN extract(second from CURRENT_TIMESTAMP ) >= 30
THEN 1::text
ELSE 0::text
END
|| ' minute'
)::interval ;
Оптимизация, это добавление 30 секунд и затем просто date_trunc()
, я знал это раньше, но особая благодарность irc://irc.freenode.net/#postgresql
StuckMojo
SELECT date_trunc(
'minute'
, CURRENT_TIMESTAMP::timestamp without time zone
+ '30 seconds'::interval
);
update @stephen, конечно, это так, хотя технически это не то, что требовал вопрос .
CREATE OR REPLACE FUNCTION round_trunc ( in text, in timestamp ) RETURNS timestamp without time zone AS $$
SELECT pg_catalog.date_trunc(
$1
, $2::timestamp without time zone
+ ('0.5 ' || $1 )::interval
)
$$ LANGUAGE sql VOLATILE;
Ой, подождите, я вижу, что он просит, он хочет округлить до ближайшей абстрактной единицы времени. Как четверть часа, я далеко отсюда.