포스트그레스: 타임스탬프를 가장 가까운 분으로 올림 또는 내림하려면 어떻게 해야 합니까?
가장 가까운 분으로 반올림된 타임스탬프를 반환하는 postgresql 함수가 있습니까?입력 값은 타임스탬프이고 반환 값은 타임스탬프여야 합니다.
기본 제공 기능 사용date_trunc(text, timestamp)예:
select date_trunc('minute', now())
편집: 가장 최근의 1분으로 잘립니다.반올림한 결과를 얻으려면 먼저 타임스탬프에 30초를 추가합니다. 예:
select date_trunc('minute', now() + interval '30 second')
가장 가까운 시간이 반환됩니다.
자세한 내용은 포스트그레스 날짜/시간 함수 및 연산자 참조
유사한(그리고 더 일반적인) 질문에 대한 답변,
가장 가까운 분 간격으로"(1분, 5분, 10분 등)
CREATE FUNCTION round_minutes(TIMESTAMP WITHOUT TIME ZONE, integer)
RETURNS TIMESTAMP WITHOUT TIME ZONE AS $$
SELECT
date_trunc('hour', $1)
+ cast(($2::varchar||' min') as interval)
* round(
(date_part('minute',$1)::float + date_part('second',$1)/ 60.)::float
/ $2::float
)
$$ LANGUAGE SQL IMMUTABLE;
CREATE FUNCTION round_minutes(TIMESTAMP WITHOUT TIME ZONE, integer,text)
RETURNS text AS $$
SELECT to_char(round_minutes($1,$2),$3)
$$ LANGUAGE SQL IMMUTABLE;
SELECT round_minutes('2010-09-17 16:23:12', 5);
-- 2010-09-17 16:25:00
SELECT round_minutes('2010-09-17 16:23:12', 10, 'HH24:MI');
-- 16:20
http://wiki.postgresql.org/wiki/Round_time 및 @CrowMagnumb이 보여주었듯이 "최후의 라운드"에 적응했습니다.
위의 피터의 답변을 사용하여 천장과 바닥 기능을 만들려다가 반올림 기능을 호출할 때 초를 고려해야 한다는 것을 알게 되었습니다.이것은 둥근 모양, 바닥 모양, 천장 모양의 타임스탬프를 표시할 수 있습니다.
CREATE OR REPLACE FUNCTION round_minutes( TIMESTAMP WITHOUT TIME ZONE, integer)
RETURNS TIMESTAMP WITHOUT TIME ZONE AS $$
SELECT date_trunc('hour', $1) + (cast(($2::varchar||' min') as interval) * round( (date_part('minute',$1)::float + date_part('second',$1)/ 60.)::float / cast($2 as float)))
$$ LANGUAGE SQL IMMUTABLE STRICT;
CREATE OR REPLACE FUNCTION floor_minutes( TIMESTAMP WITHOUT TIME ZONE, integer )
RETURNS TIMESTAMP WITHOUT TIME ZONE AS $$
SELECT round_minutes( $1 - cast((($2/2)::varchar ||' min') as interval ), $2 );
$$ LANGUAGE SQL IMMUTABLE STRICT;
CREATE OR REPLACE FUNCTION ceiling_minutes( TIMESTAMP WITHOUT TIME ZONE, integer )
RETURNS TIMESTAMP WITHOUT TIME ZONE AS $$
SELECT round_minutes( $1 + cast((($2/2)::varchar ||' min') as interval ), $2 );
$$ LANGUAGE SQL IMMUTABLE STRICT;
타임스탬프를 반올림하다
CREATE or replace FUNCTION date_round_down(base_date timestamptz, round_interval INTERVAL)
RETURNS timestamptz AS $BODY$
SELECT TO_TIMESTAMP(EXTRACT(epoch FROM date_trunc('hour', $1))::INTEGER + trunc((EXTRACT(epoch FROM $1)::INTEGER - EXTRACT(epoch FROM date_trunc('hour', $1))::INTEGER) / EXTRACT(epoch FROM $2)::INTEGER) * EXTRACT(epoch FROM $2)::INTEGER)
$BODY$ LANGUAGE SQL STABLE;
SELECT date_round_down('2017-06-02 16:39:35', '15 minutes') -- 2017-06-02 16:30:35
언급URL : https://stackoverflow.com/questions/6195439/postgres-how-do-you-round-a-timestamp-up-or-down-to-the-nearest-minute
'programing' 카테고리의 다른 글
| Qt Creator - Project ERROR: Xcode가 제대로 설정되지 않았습니다./usr/bin/xcodebuild를 실행하여 라이센스 계약을 확인해야 할 수 있습니다. (0) | 2023.05.20 |
|---|---|
| 프로젝트 기능 > Clean in Eclipse (0) | 2023.05.14 |
| 비동기의수면 대 시간.잠을 자다, 잠을 자다, 잠을 자다, 잠을 보다 (0) | 2023.05.14 |
| mongod --dbpath 설정 방법 (0) | 2023.05.14 |
| 디렉터리가 있는 디렉터리를 삭제할 수 없습니다.삭제(경로, 참) (0) | 2023.05.14 |