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

Oracle SQL за последния работен ден от текущия месец, включително федерални празници в Oracle

Съхранявайте тези федерални празници в таблица с празници като DATE въведете и след това опитайте нещо подобно:Намерете най-стария ( MAX ) ден през последните седем дни от месеца, който не е нито събота или неделя, нито празник, споменат в таблицата с празниците.

Предположенията тук са, че 1) не всичките седем дни в края на месеца могат да бъдат празници или уикенд и 2) събота и неделя са почивни. Можете да регулирате level или съответно клауза where, в зависимост от това дали горното предположение трябва винаги да е вярно или не.

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

Много по-добър подход би бил да имате календарна таблица с всички дати от годината и предварително дефинирана колона, наречена isbusinessday . Тогава заявката ще бъде много по-проста.

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. Без диалектно съпоставяне за JDBC тип:-9

  2. ASCII() функция в Oracle

  3. Предотвратяване на отпадане на таблица в целева схема в Oracle Streams

  4. NetSuite запази формула за търсене за умножаване на резултатите от две други колони

  5. Бройте дните между два сегмента