sql >> Database teknologi >  >> RDS >> Oracle

Oracle SQL for sidste arbejdsdag i den aktuelle måned inklusive føderale helligdage i oracle

Gem disse føderale helligdage i en helligdagstabel som DATE skriv og prøv noget som dette:Find den ældste ( MAX ) dag i de sidste syv dage i måneden, der hverken er en lørdag eller en søndag eller en helligdag, der er nævnt i helligdagstabellen.

Forudsætningerne her er, at 1) ikke alle syv dage i slutningen af ​​måneden alle kan være helligdage eller weekender, og 2) lørdag og søndage er fri. Du kan justere level eller hvor klausul i overensstemmelse hermed, afhængig af om ovenstående antagelse altid skal holde stik eller ej.

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

En meget bedre tilgang ville være at have en kalendertabel med alle årets datoer og foruddefinerede kolonne kaldet isbusinessday . Så ville forespørgslen være meget enklere.

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


  1. Sådan udføres Oracle sql-script via java-kode

  2. Django MySQL særskilt forespørgsel for at få flere værdier

  3. Hvor er Postgresql-konfigurationsfilen:'postgresql.conf' på Windows?

  4. Fejl:vælg kommando nægtet bruger '<brugerid>'@'<ip-adresse>' for tabellen '<tabelnavn>'