Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle SQL na ostatni dzień roboczy bieżącego miesiąca, w tym święta państwowe w Oracle

Zapisz te święta państwowe w tabeli świąt jako DATE wpisz, a następnie spróbuj czegoś takiego:Znajdź najstarszy ( MAX ) dzień w ciągu ostatnich siedmiu dni miesiąca, który nie jest sobotą, niedzielą ani świętem wymienionym w tabeli dni świątecznych.

Założenia są takie, że 1) nie wszystkie siedem dni na koniec miesiąca mogą być świętami lub weekendami oraz 2) soboty i niedziele są wolne. Możesz dostosować level lub klauzula gdzie odpowiednio, w zależności od tego, czy powyższe założenie powinno zawsze być prawdziwe, czy nie.

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 );

O wiele lepszym rozwiązaniem byłoby posiadanie tabeli kalendarza ze wszystkimi datami roku i predefiniowaną kolumną o nazwie isbusinessday . Wtedy zapytanie byłoby znacznie prostsze.

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. 9 najczęściej zadawanych zapytań dotyczących drukarek Oracle Apps

  2. Wyzwalacz Oracle po wstawieniu lub usunięciu

  3. Jak wydrukować wynik w innej linii za pomocą zapytania SQL?

  4. Jak usunąć wyzwalacz w Oracle zawierający znak specjalny?

  5. Pomóż mi wprowadzić terminologię Oracle do terminologii SQL Server