Oracle SQL 関数 : NEXT_DAY : 指定日以降の最初の指定曜日の日付計算
dateRet := NEXT_DAY( dateSrc, charSrc );
NEXT_DAY は 日付dataSrc 以降の指定曜日の最初の日付(DATE型)を返します。
(指定日から見て、翌週の指定曜日の日付を取得します)
指定曜日charSrc は「日曜日」「月曜日」「火曜日」「水曜日」「木曜日」「金曜日」「土曜日」
または、短縮文字列「日」「月」「火」「水」「木」「金」「土」で指定します。
2 TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '日曜日' ), 'YYYY/MM/DD' ) AS NORMALSUN |
3 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '月曜日' ), 'YYYY/MM/DD' ) AS NORMALMON |
4 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '火曜日' ), 'YYYY/MM/DD' ) AS NORMALTUE |
5 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '水曜日' ), 'YYYY/MM/DD' ) AS NORMALWED |
6 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '木曜日' ), 'YYYY/MM/DD' ) AS NORMALTHU |
7 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '金曜日' ), 'YYYY/MM/DD' ) AS NORMALFRI |
8 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '土曜日' ), 'YYYY/MM/DD' ) AS NORMALSAT |
NORMALSUN NORMALMON NORMALTUE NORMALWED |
NORMALTHU NORMALFRI NORMALSAT |
2000/02/06 2000/02/07 2000/02/08 2000/02/02 |
2000/02/03 2000/02/04 2000/02/05 |
この例では、曜日の指定を長い文字列で指定し2000年2月1日(火曜日)からみて、一番近い各曜日の日付を取得しています。
以下の例では、曜日の指定を短縮形の指定にしています。
2 TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '日' ), 'YYYY/MM/DD' ) AS SHORTSUN |
3 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '月' ), 'YYYY/MM/DD' ) AS SHORTMON |
4 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '火' ), 'YYYY/MM/DD' ) AS SHORTTUE |
5 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '水' ), 'YYYY/MM/DD' ) AS SHORTWED |
6 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '木' ), 'YYYY/MM/DD' ) AS SHORTTHU |
7 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '金' ), 'YYYY/MM/DD' ) AS SHORTFRI |
8 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), '土' ), 'YYYY/MM/DD' ) AS SHORTSAT |
SHORTSUN SHORTMON SHORTTUE SHORTWED |
SHORTTHU SHORTFRI SHORTSAT |
2000/02/06 2000/02/07 2000/02/08 2000/02/02 |
2000/02/03 2000/02/04 2000/02/05 |
日付指定のところですが、曜日の文字列では無く、各曜日に対応したインデックス値でもできる様です。
この方法はあまり推奨はしてない様ですが。
2 TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), 1 ), 'YYYY/MM/DD' ) AS SUN |
3 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), 2 ), 'YYYY/MM/DD' ) AS MON |
4 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), 3 ), 'YYYY/MM/DD' ) AS TUE |
5 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), 4 ), 'YYYY/MM/DD' ) AS WED |
6 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), 5 ), 'YYYY/MM/DD' ) AS THU |
7 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), 6 ), 'YYYY/MM/DD' ) AS FRI |
8 ,TO_CHAR( NEXT_DAY(TO_DATE( '2000/02/01' ), 7 ), 'YYYY/MM/DD' ) AS SAT |
2000/02/06 2000/02/07 2000/02/08 2000/02/02 |
2000/02/03 2000/02/04 2000/02/05 |
本書用のWebアプリを使ってSQLを実行し学習していきます。初心者の方に分かりやすく、図表を多く使って解説されています。 学習の最後には200問越えのドリルが付いていてSQLのスキルが試せる様になっています。