PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

2 तिथियों के बीच महीनों की संख्या ज्ञात करें

अभिव्यक्ति

age('2012-11-30 00:00:00'::timestamp, '2012-10-31 00:00:00'::timestamp) 

30 days gives देता है . हम उम्मीद कर रहे हैं 1 month क्योंकि दोनों मान महीने के अंतिम दिनों की ओर इशारा करते हैं। यदि हम मूल्यों में 1 दिन जोड़ते हैं तो हमें अगले महीने के पहले दिन मिलेंगे और

age('2012-12-01 00:00:00'::timestamp, '2012-11-01 00:00:00'::timestamp)

हमें उम्मीद के मुताबिक 1 महीने का समय देगा। तो आइए देखें कि क्या हमारे पास महीने के दो आखिरी दिन हैं और इस मामले में अगले दिनों की वापसी आयु अंतराल है। अन्य मामलों में हम मूल मानों का आयु अंतराल लौटाएंगे:

create or replace function age_m (t1 timestamp, t2 timestamp)
returns interval language plpgsql immutable
as $$
declare
    _t1 timestamp = t1+ interval '1 day';
    _t2 timestamp = t2+ interval '1 day';
begin
    if extract(day from _t1) = 1 and extract(day from _t2) = 1 then
        return age(_t1, _t2);
    else
        return age(t1, t2);
    end if;
end $$;

कुछ उदाहरण:

with my_table(date1, date2) as (
values
    ('2012-11-30 00:00:00'::timestamp, '2012-10-31 00:00:00'::timestamp),
    ('2012-12-31 00:00:00'::timestamp, '2012-10-31 00:00:00'::timestamp),
    ('2013-01-31 00:00:00'::timestamp, '2012-10-31 00:00:00'::timestamp),
    ('2013-02-28 00:00:00'::timestamp, '2012-10-31 00:00:00'::timestamp)
)

select *, age(date1, date2), age_m(date1, date2)
from my_table

        date1        |        date2        |      age       | age_m  
---------------------+---------------------+----------------+--------
 2012-11-30 00:00:00 | 2012-10-31 00:00:00 | 30 days        | 1 mon
 2012-12-31 00:00:00 | 2012-10-31 00:00:00 | 2 mons         | 2 mons
 2013-01-31 00:00:00 | 2012-10-31 00:00:00 | 3 mons         | 3 mons
 2013-02-28 00:00:00 | 2012-10-31 00:00:00 | 3 mons 28 days | 4 mons
(4 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सीएसवी/पोस्टग्रेज मेमोरी पर डंप करें

  2. रेल 4 में hstore सेट करना, गतिशील कुंजी/मान

  3. विंडोज 10 पर विजुअल स्टूडियो 2015 से libpqxx को लिंक करना

  4. यह PostgreSQL लेनदेन चेतावनी क्यों देता है:कोई लेनदेन प्रगति पर नहीं है

  5. PostgreSQL में सभी डेटाबेस का सार्वजनिक स्कीमा क्यों है?