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

Oracle SQL cho Ngày làm việc Cuối cùng của Tháng Hiện tại bao gồm các ngày lễ liên bang ở oracle

Lưu trữ các ngày lễ liên bang đó trong bảng ngày lễ dưới dạng DATE nhập và thử một cái gì đó như sau:Tìm cái cũ nhất (MAX ) ngày trong bảy ngày cuối cùng của tháng không phải là thứ Bảy hoặc Chủ nhật cũng như ngày lễ được đề cập trong bảng ngày lễ.

Các giả định ở đây là 1) không phải tất cả bảy ngày cuối tháng đều có thể là ngày lễ hoặc cuối tuần và 2) Thứ Bảy và Chủ nhật được nghỉ. Bạn có thể điều chỉnh level hoặc mệnh đề where phù hợp, tùy thuộc vào việc liệu giả định trên có luôn đúng hay không.

SELECT MAX(dt) AS last_working_day 
FROM
(
SELECT last_day(SYSDATE) - level + 1 as dt
FROM dual CONNECT BY
     level <= 7  -- the last seven days of the month
     )  WHERE TO_CHAR(dt,'DY', 'NLS_DATE_LANGUAGE = AMERICAN') NOT IN ('SAT','SUN')
     AND dt NOT IN ( SELECT holiday from federal_holidays );

Một cách tiếp cận tốt hơn nhiều sẽ là có một bảng Lịch với tất cả các ngày trong năm và cột được xác định trước có tên là isbusinessday . Sau đó, truy vấn sẽ đơn giản hơn nhiều.

SELECT MAX(dt)
  FROM calendar
  WHERE isbusinessday = 'Y' 
AND TO_CHAR(dt,'YYYYMM') = TO_CHAR(SYSDATE,'YYYYMM');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. R tới Kết nối Oracle bằng ODBC

  2. THỦ TỤC ORACLe - AUTHID chỉ được phép trong cấp giản đồ

  3. Oracle có tự động tạo chỉ mục phụ cho các cột NGOẠI KHÓA không?

  4. Lặp lại mỗi giá trị n lần dưới dạng hàng trong SQL

  5. menu thả xuống tự động hoàn thành của cóc for oracle