Created
December 23, 2014 04:51
-
-
Save cecepm/ce2bd3ebd8a48a3a3c37 to your computer and use it in GitHub Desktop.
PostgreSQL: round time function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| CREATE OR REPLACE FUNCTION round_minutes( TIMESTAMP WITH TIME ZONE, integer) | |
| RETURNS TIMESTAMP WITH 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; | |
| CREATE OR REPLACE FUNCTION floor_minutes( TIMESTAMP WITH TIME ZONE, integer ) | |
| RETURNS TIMESTAMP WITH TIME ZONE AS $$ | |
| SELECT round_minutes( $1 - cast((($2/2)::varchar ||' min') as interval ), $2 ); | |
| $$ LANGUAGE SQL IMMUTABLE; | |
| CREATE OR REPLACE FUNCTION ceiling_minutes( TIMESTAMP WITH TIME ZONE, integer ) | |
| RETURNS TIMESTAMP WITH TIME ZONE AS $$ | |
| SELECT round_minutes( $1 + cast((($2/2)::varchar ||' min') as interval ), $2 ); | |
| $$ LANGUAGE SQL IMMUTABLE; | |
| CREATE OR REPLACE FUNCTION round_hours( TIMESTAMP WITH TIME ZONE, integer) | |
| RETURNS TIMESTAMP WITH TIME ZONE AS $$ | |
| SELECT date_trunc('day', $1) + (cast(($2::varchar||' hour') as interval) * round( (date_part('hour',$1)::float + date_part('minute',$1)/ 60. + date_part('second',$1)/ 3600.)::float / cast($2 as float))) | |
| $$ LANGUAGE SQL IMMUTABLE; | |
| CREATE OR REPLACE FUNCTION floor_hours( TIMESTAMP WITH TIME ZONE, integer ) | |
| RETURNS TIMESTAMP WITH TIME ZONE AS $$ | |
| SELECT round_hours( $1 - cast((($2/2)::varchar ||' hour') as interval ), $2 ); | |
| $$ LANGUAGE SQL IMMUTABLE; | |
| CREATE OR REPLACE FUNCTION ceiling_hours( TIMESTAMP WITH TIME ZONE, integer ) | |
| RETURNS TIMESTAMP WITH TIME ZONE AS $$ | |
| SELECT round_hours( $1 + cast((($2/2)::varchar ||' hour') as interval ), $2 ); | |
| $$ LANGUAGE SQL IMMUTABLE; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment