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

दी गई तिथि में व्यावसायिक दिनों की संख्या कैसे जोड़ें

कुंजी व्यावसायिक दिनों की श्रृंखला उत्पन्न करना और उन्हें row_number() . के साथ क्रमित करना है :

create or replace function add_business_day(from_date date, num_days int)
returns date
as $fbd$
    select d
    from (
        select d::date, row_number() over (order by d)
        from generate_series(from_date+ 1, from_date+ num_days* 2+ 5, '1d') d
        where 
            extract('dow' from d) not in (0, 6) 
            and d not in (select pyha from pyha)
        ) s
    where row_number = num_days
$fbd$ language sql;

परीक्षण क्वेरी के परिणाम सही प्रतीत होते हैं:

select days, add_business_day('2018-12-08', days)
from generate_series(1, 20) days

 days | add_business_day 
------+------------------
    1 | 2018-12-10
    2 | 2018-12-11
    3 | 2018-12-12
    4 | 2018-12-13
    5 | 2018-12-14
    6 | 2018-12-17
    7 | 2018-12-18
    8 | 2018-12-19
    9 | 2018-12-20
   10 | 2018-12-21
   11 | 2018-12-27
   12 | 2018-12-28
   13 | 2018-12-31
   14 | 2019-01-02
   15 | 2019-01-03
   16 | 2019-01-04
   17 | 2019-01-07
   18 | 2019-01-08
   19 | 2019-01-09
   20 | 2019-01-10
(20 rows)

वैकल्पिक रूप से, आप तारीख को एक लूप में पा सकते हैं:

create or replace function add_business_day_loop(from_date date, num_days int)
returns date
as $fbd$
begin
    while num_days > 0 loop
        from_date:= from_date+ 1;
        while from_date in (select pyha from pyha) or extract('dow' from from_date) in (0, 6) loop
            from_date:= from_date+ 1;
        end loop;
        num_days:= num_days- 1;
    end loop;
    return from_date;
end;
$fbd$ language plpgsql;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पूरे डेटाबेस में खाली स्ट्रिंग्स ('') को NULL पर सेट करें

  2. विंडोज के लिए पोस्टग्रेएसक्यूएल विकसित करना, भाग 2

  3. PostgreSQL डेटाबेस के साथ कैसे काम करें

  4. PostgreSQL:त्रुटि:42601:रिकॉर्ड लौटाने वाले कार्यों के लिए एक कॉलम परिभाषा सूची की आवश्यकता होती है

  5. क्या पोस्टग्रेज में कॉलम के प्राकृतिक क्रम को बदलना संभव है?