प्रश्न 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;