sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan bestemmer man den største opløsning af et INTERVAL?

Spørgsmålet er ikke 100 % klart, så svaret er måske eller ikke præcis det, du leder efter, men...

Der er en justify_interval() funktion, som du måske vil se nærmere på.

test=# select justify_interval(INTERVAL '100 days 3 seconds');
    justify_interval     
-------------------------
 3 mons 10 days 00:00:03
(1 row)

test=# select justify_interval(TIME '20:05' - TIME '12:01:01');
 justify_interval 
------------------
 08:03:59
(1 row)

test=# select justify_interval(AGE(NOW(), NOW() - INTERVAL '1 MONTH'));
 justify_interval 
------------------
 1 mon
(1 row)

For der skal du udtrække året, derefter måneden, så dagen osv., indtil du kommer med et svar, der ikke er nul:

test=# select extract('mon' from interval '3 mons 10 days 00:00:03');
 date_part 
-----------
         3

Til dit andet spørgsmål i kommentarerne:

create function max_res(interval) returns interval as $$
select case
       when extract('year' from justify_interval($1)) > 0 or
            extract('mon' from justify_interval($1)) > 0 or
            extract('day' from justify_interval($1)) > 0
       then '1 day'
       when extract('hour' from justify_interval($1)) > 0
       then '1 hour'
       when ...
       end;
$$ language sql immutable strict;


  1. Brug PostgreSQL SSL-forbindelse i rust med selvsignerede certifikater

  2. Hvordan kører man en .sql-fil som en del af en MySQL Workbench 6.2-forespørgsel?

  3. Hvordan justify_hours() virker i PostgreSQL

  4. Kan ikke åbne mysql-workbench