私は最近、米国の休日を返すOracleクエリを用意するように求められました。いくつかの研究をした後、私はこの点に関して何も見つけることができませんでした。見つかったソリューションのほとんどはC#またはVB用でした。Oracleクエリーで米国の休日を取得するには?
0
A
答えて
1
以下、私はクエリを共有しています。いくつかの州では休日が増えているかもしれませんが、最も関連性の高いものを一覧表示するだけでそれを保持したいと考えています。
/*
New Year's Day -------------- January 1st
Martin Luther King, Jr. ----- Third Monday in January
Washington's Birthday ------- Third Monday in February
Memorial Day ---------------- Last Monday in May
Independence Day ------------ July 4th
Labor Day ------------------- First Monday in September
Columbus Day ---------------- Second Monday in October
Veterans Day ---------------- November 11
Thanksgiving Day ------------ Fourth Thursday in November
Christmas Day --------------- December 25th
*/
SELECT NEXT_DAY(TRUNC(SYSDATE, 'YYYY') - 1, 'MONDAY') FROM DUAL UNION
SELECT NEXT_DAY(TRUNC(SYSDATE, 'YYYY') - 1, 'MONDAY') + 14 FROM DUAL UNION
SELECT NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 1) - 1, 'MONDAY') + 14 FROM DUAL UNION
SELECT NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 5) - 1, 'MONDAY') - 7 FROM DUAL UNION
SELECT ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),6) + 3 FROM DUAL UNION
SELECT NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),8), 'MONDAY') FROM DUAL UNION
SELECT NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),9) - 1, 'MONDAY') + 7 FROM DUAL UNION
SELECT ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),10) + 10 FROM DUAL UNION
SELECT NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 10) - 1, 'THURSDAY') + 21 FROM DUAL UNION
SELECT ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),11) + 24 FROM DUAL;
2
は、OracleからのビルドでSCHEDULER SCHEDULE
を使用することができます。まず、あなたはここで、休日のスケジュールを作成する必要がありますいくつかの例は次のとおりです。
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE('NEW_YEARS_DAY', repeat_interval => 'FREQ=YEARLY;INTERVAL=1;BYDATE=0101');
DBMS_SCHEDULER.CREATE_SCHEDULE('MARTIN_LUTHER_KING_DAY', repeat_interval => 'FREQ=MONTHLY;BYMONTH=JAN;BYDAY=3 MON', comments => 'Third Monday of January');
DBMS_SCHEDULER.CREATE_SCHEDULE('WASHINGTONS_BIRTHDAY', repeat_interval => 'FREQ=MONTHLY;BYMONTH=FEB;BYDAY=3 MON', comments => 'Third Monday of February');
DBMS_SCHEDULER.CREATE_SCHEDULE('MEMORIAL_DAY', repeat_interval => 'FREQ=MONTHLY;BYMONTH=MAY;BYDAY=-1 MON', comments => 'Last Monday of May');
DBMS_SCHEDULER.CREATE_SCHEDULE('INDEPENDENCE_DAY', repeat_interval => 'FREQ=YEARLY;INTERVAL=1;BYDATE=0704');
DBMS_SCHEDULER.CREATE_SCHEDULE('CHRISTMAS_DAY', repeat_interval => 'FREQ=YEARLY;INTERVAL=1;BYDATE=1225');
DBMS_SCHEDULER.CREATE_SCHEDULE('SPRING_BREAK', repeat_interval => 'FREQ=YEARLY;BYDATE=0301+SPAN:7D');
DBMS_SCHEDULER.CREATE_SCHEDULE('ALL_HOLIDAYS', repeat_interval => 'FREQ=DAILY;INTERSECT=CHRISTMAS_DAY,INDEPENDENCE_DAY,MARTIN_LUTHER_KING_DAY,MEMORIAL_DAY,NEW_YEARS_DAY,SPRING_BREAK,WASHINGTONS_BIRTHDAY');
END;
は、ここでは、カレンダーの構文を参照してください。次の記念日:Calendaring Syntax
を次に、あなたはDBMS_SCHEDULER.EVALUATE_CALENDAR_STRING
例でそれらを調べることができます
DECLARE
start_time TIMESTAMP := TRUNC(LOCALTIMESTAMP);
next_run_date TIMESTAMP := start_time;
BEGIN
DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING('MEMORIAL_DAY', NULL, next_run_date, next_run_date);
DBMS_OUTPUT.PUT_LINE (next_run_date);
END;
例:すべてのholid今年のAYS
DECLARE
start_time TIMESTAMP := TIMESTAMP '2016-12-31 00:00:00';
next_run_date TIMESTAMP := start_time;
BEGIN
LOOP
DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING('ALL_HOLIDAYS', NULL, next_run_date, next_run_date);
EXIT WHEN next_run_date > TIMESTAMP '2017-12-31 00:00:00';
DBMS_OUTPUT.PUT_LINE (next_run_date);
END LOOP;
END;
例:次の10ワシントンの誕生日
DECLARE
start_time TIMESTAMP := TRUNC(LOCALTIMESTAMP);
next_run_date TIMESTAMP := start_time;
BEGIN
FOR i IN 1..10 LOOP
DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING('WASHINGTONS_BIRTHDAY', NULL, next_run_date, next_run_date);
DBMS_OUTPUT.PUT_LINE (next_run_date);
END LOOP;
END;
関連する問題
- 1. 私のカレンダーにGoogleの米国の休日を追加するには?
- 2. 国休日リスト
- 3. JQuery Highcharts - 米国のフォーマットで取得された日付ではなく、英国ではない
- 4. 米国の日付を日本語に変換する
- 5. Momentjsのロケール - 曜日の設定米国
- 6. は米国
- 7. oracleで日付形式の国別タイムゾーンを取得する方法は?
- 8. Excel 2010 - 米国の日付を英国の形式に変更する
- 9. Oracleクエリーを休止状態に変換する
- 10. 英国と米国の日付の混合 - 全部英国に変換
- 11. PHPで日付を米国の書式に変換するには?
- 12. Python datetimeで米国と英国の日付形式を切り替える
- 13. アンドロイドカレンダーから休日を取得する
- 14. 正規表現米国の郵便番号を取得
- 15. 休止状態のoracleデータの取得
- 16. セージペイパル米国発送国
- 17. 時間は、米国のサーバー
- 18. JDBC Oracle - クエリーのためのExplainプランを取得する
- 19. 米国外のアプリを公開し、米国のAppstoreで利用できるようにする
- 20. Google Maps APIをクエリすると、「ニューヨーク、米国」と「ニューヨーク、ニューヨーク、米国」と同じ結果が得られます
- 21. 米国株価API
- 22. 米国東部(米国バージニア州)のElastic BeanstalkでのAWSのipv6サポート
- 23. gis x、y座標から米国の郵便番号を取得するアルゴリズム
- 24. 米国国勢調査局のTopojsonファイル
- 25. JavaのUnixタイムスタンプを日付に換算するOracle SQLクエリー
- 26. 米国のデフォルトセンターですか?デフォルトで
- 27. は、カナダと米国は、私がドロップダウンにカナダと米国で唯一のタイムゾーンを表示したいPHP
- 28. 米国の日付時刻を文化固有の値に変換する
- 29. Google Places API(米国のみ)
- 30. PHP regexp米国の住所
あなたがSYSているときに上記のカレンダ構文ドキュメントのルールおよび制限によると、あなたのソリューションが理想的です。したがって、DBAにとっては最適なソリューションですが、dbユーザーにとっては最適なソリューションではありません。とにかく私はそれが何らかの方法で問題を解決するのであなたの答えをupvoteします。 – yopez83
SYS権限が必要なのはなぜですか? 「SYSだけがSYSスキーマで何かを行うことができる」と言われていますが、独自のスキーマでスケジュールを作成することができます。「CREATE JOB」権限が必要です。[使用上の注意](http://docs.oracle.com/cd /B19306_01/appdev.102/b14258/d_sched.htm#sthref5542)。 –
本当にあなたの組織のポリシーに依存します。私がJOBを作成するには、私のためにDBAを作成する必要があります。それは走り回っているようではありません! – yopez83