Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Thay thế cho chức năng giải mã

Điều này có thể đạt được bằng một truy vấn con đơn giản, đếm số ngày nghỉ giữa một ngày cụ thể và ngày + 5. Phần sau sẽ trả về một ngày là năm ngày không nghỉ trong tương lai:

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

Chỉ cần thay đổi cả hai "5" thành một số khác để thay đổi khoảng thời gian đánh giá.

SQLFiddle tại đây

Chỉnh sửa - dựa trên bình luận bên dưới, mã của tôi không đánh giá bất kỳ ngày nào sau ngày thứ năm. Điều này có lẽ sẽ dễ dàng hơn nhiều với một hàm, nhưng mã dựa trên cte sau đây cũng sẽ hoạt động:

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   

Tập lệnh này xây dựng một bảng lịch để nó có thể đánh giá từng ngày (kỳ nghỉ hoặc không nghỉ lễ); sau đó chúng tôi nhận được số ngày không phải ngày lễ và sử dụng số ngày thứ sáu.

SQLFiddle tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham số Dapper.net Oracle

  2. Cách xem nội dung hàm lưu trữ PL / SQL trong Oracle

  3. ORACLE Chèn hiệu suất trên các bảng được lập chỉ mục

  4. kết nối oci_connect không thành công

  5. bắt ngoại lệ DB trong ứng dụng JSF + EJB