助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26470
問題を開く
次の関数の結果として正しいものを1つ選択して下さい。
ただし、日付書式はRR-MM-DDとします。
ADD_MONTHS('11-04-30', -3)
ただし、日付書式はRR-MM-DDとします。
ADD_MONTHS('11-04-30', -3)
正解
11-01-31
解説
ADD_MONTHS関数は、引数で指定された日付のnヶ月後の日付を返す関数です。2番目の引数に負が指定された場合はnヶ月前の値を返します。
また、1番目の引数に月の最終日が指定された場合はnヶ月後(またはnヶ月前)の最終日が返されます。
以上より、
・11-01-31
が正解となります。
設問では1番目の引数に"11-04-30"が指定されていますが、ADD_MONTHS関数の結果は"11-01-30"にはなりません。
1番目の引数に月の最終日が指定された場合は、nヶ月後(またはnヶ月前)の最終日が返されますので注意しましょう。
設問のSQL関数の実行結果は次のようになります。

参考:
ADD_MONTHS関数は、単一行関数のうちの日付関数に分類されます。
引数で指定された日付のnヶ月後の日付を返します。
使用法は以下の通りです。
ADD_MONTHS(日付, n)
nが正の値の場合は、nヶ月後の日付を、nが負の値の場合はnヶ月前の値を返します。

ADD_MONTHS関数では月の最終日の扱いに注意しなければなりません。
1番目の引数に月の最終日が指定された場合は、nヶ月後(またはnヶ月前)の最終日が返されますので注意しましょう。
その他、主な日付関数は次のとおりです。
また、1番目の引数に月の最終日が指定された場合はnヶ月後(またはnヶ月前)の最終日が返されます。
以上より、
・11-01-31
が正解となります。
設問では1番目の引数に"11-04-30"が指定されていますが、ADD_MONTHS関数の結果は"11-01-30"にはなりません。
1番目の引数に月の最終日が指定された場合は、nヶ月後(またはnヶ月前)の最終日が返されますので注意しましょう。
設問のSQL関数の実行結果は次のようになります。

SQLを表示
SELECT ADD_MONTHS('11-04-30', -3)
FROM dual;
FROM dual;
参考:
ADD_MONTHS関数は、単一行関数のうちの日付関数に分類されます。
引数で指定された日付のnヶ月後の日付を返します。
使用法は以下の通りです。
ADD_MONTHS(日付, n)
nが正の値の場合は、nヶ月後の日付を、nが負の値の場合はnヶ月前の値を返します。

SQLを表示
SELECT ADD_MONTHS('11-04-30', 3), ADD_MONTHS('11-04-30', -3)
FROM dual;
FROM dual;
ADD_MONTHS関数では月の最終日の扱いに注意しなければなりません。
1番目の引数に月の最終日が指定された場合は、nヶ月後(またはnヶ月前)の最終日が返されますので注意しましょう。
その他、主な日付関数は次のとおりです。
その月の末日が何日かなんて覚えなきゃいけないの?
y
yT26Yt
投稿日 2026/09/10
その月の末日が何日かなんて覚えなきゃいけないの?
本番で、4月は30日が末日です。って書いてあるんでしょうか?
2026/09/10 18:29
その月の末日が何日かなんて覚えなきゃいけないの?
試験対策としてわざわざ覚える必要があるかと言われるとどうなんだろう?とは思いますが、一般的には既知のものとして扱われるものかなぁと思います。
存在しない日付として 2/30, 4/31, 11/31, 12/32 が例示されても「まぁそうですよね」ぐらいにしか思わないのと同じかなぁと。
※私の周りの数人に聞いた程度ですが、大の月、小の月(という用語を知らなくても)がそれぞれ何月かを知らない人はいなかったので、割と一般的かなと判断しました。
コメント
この投稿に対して返信しませんか?