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

Алтернатива за функцията за декодиране

Това може да се постигне с проста подзаявка, която отчита броя на празничните дати между определена дата и дата+5. Следното ще върне дата, която е пет непразнични дни в бъдещето:

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

Просто променете двете "5" с друго число, за да промените периода на оценка.

SQLFiddle тук

Редактиране - въз основа на коментара по-долу, моят код не оценява нито един ден след петия ден. Това вероятно би било много по-лесно с функция, но следният базиран на cte код също ще работи:

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 с помощта на ROracle с tnsnames.ora на Mac OS 10.10

  3. Devart dotConnect за Oracle във Visual Studio 2015 - проблеми със съвместимостта

  4. JOINs с условие в HQL заявка?

  5. Какъв е синтаксисът за дефиниране на процедура на Oracle в друга съхранена процедура?