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

डिकोड फ़ंक्शन के लिए वैकल्पिक

यह एक साधारण सबक्वेरी के साथ प्राप्त किया जा सकता है जो एक निर्दिष्ट तिथि और दिनांक +5 के बीच अवकाश तिथियों की संख्या की गणना करता है। निम्नलिखित एक तारीख लौटाएगा जो भविष्य में पांच गैर-अवकाश दिनों की होगी:

testdate+(select 5+count(1) 
            from holiday
           where holidaydate between testdate
                                 and testdate + 5)

मूल्यांकन अवधि बदलने के लिए बस "5" दोनों को एक और संख्या में बदलें।

SQLFiddle यहां

संपादित करें - नीचे टिप्पणी के आधार पर, मेरा कोड पांचवें दिन के बाद किसी भी दिन का मूल्यांकन नहीं करता है। यह शायद किसी फ़ंक्शन के साथ बहुत आसान होगा, लेकिन निम्न सीटीई-आधारित कोड भी काम करेगा:

with cte as ( (select alldate,holidaydate 
                 from (select to_date('20130101','yyyymmdd')+level alldate 
                         from dual 
                       connect by level < 10000 -- adjust for period to evaluate
                      ) alldates 
                      left join holiday on alldate=holidaydate) )
select 
    testdate,test_plus_five
from ( 
    select 
        alldate test_plus_five,testdate,
        sum(case when holidaydate is null 
                 then 1 
                 else 0 end) over (partition by testdate order by alldate) lastday 
    from 
        cte,
        testdates
    where
        alldate >= testdate
    group by
        alldate,holidaydate,testdate)
where
    lastday = 6   

यह स्क्रिप्ट एक कैलेंडर तालिका बनाती है ताकि यह प्रत्येक दिन (अवकाश या गैर-अवकाश) का मूल्यांकन कर सके; तब हमें गैर-अवकाश दिनों की गिनती मिलती है, और छठे दिन का उपयोग करते हैं।

SQLFiddle यहां



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle एक वैश्वीकरण समर्थन वातावरण की स्थापना

  2. Oracle में पुनरावर्ती क्वेरी

  3. SQL में कैसे जुड़ें और निकालें

  4. sql में केस कंडीशनल स्टेटमेंट के साथ योग कैसे काम करता है?

  5. ओरेकल एसक्यूएल में अगर-elseif-else 'हालत'