PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да определите най-голямата разделителна способност на ИНТЕРВАЛ?

Въпросът не е 100% ясен, така че отговорът може или не може да бъде точно това, което търсите, но...

Има justify_interval() функция, която може да искате да разгледате.

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)

Защото там извличайте годината, след това месеца, след това деня и т.н., докато не излезете с ненулев отговор:

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

Повторете другия си въпрос в коментарите:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се дефинират глобални променливи в postgresql

  2. PostgreSQL:някои проблеми за вмъкване от select с конфликт

  3. RETURNING причинява грешка:липсващ запис от клауза FROM за таблица

  4. Може ли Sqlalchemy да работи добре с множество прикачени файлове на SQLite база данни?

  5. Грешка при опит за свързване на R към PostgreSQL чрез RODBC