sql >> データベース >  >> RDS >> Oracle

Oracleの連邦祝日を含む当月の最終営業日のOracleSQL

    これらの連邦祝日をDATEとして休日テーブルに保存します 次のように入力して試してください。最も古いものを検索します(MAX )月の最後の7日間で、土曜日でも日曜日でも、休日の表に記載されている休日でもない日。

    ここでの前提は、1)月末の7日間すべてが休日または週末になるわけではなく、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. ユーザーはデータベースにアクセスできません

    2. データベース管理用のMySQLWorkbenchをインストールします

    3. スレッドメインjava.lang.IncompatibleClassChangeErrorの例外:インターフェースorg.apache.hadoop.mapreduce.JobContextが見つかりましたが、クラスが予期されていましたか?

    4. FlaskでSQLAlchemyを使用してデータベース関数を呼び出すにはどうすればよいですか?