助け合いフォーラム
ただし、データベースの実行環境は日本語環境とし、日付書式はRR-MM-DDとします。
※ 2012年3月26日は月曜日です。
正解
SELECT ROUND(TO_DATE('12-04-10'), 'MONTH') FROM dual;
SELECT LAST_DAY('12-03-01') + 1 FROM dual;
SELECT NEXT_DAY('12-03-26', '日') FROM dual;
解説
TO_DATE関数は文字リテラルを日付値に変換します。引数に時刻が指定されていない場合は午前0時0分0秒に設定されます。
選択肢を1つずつ確認してみましょう。
・SELECT ROUND(TO_DATE('12-04-10'), 'MONTH') FROM dual;
ROUND関数の書式に"MONTH"が指定されているので、丸めて当月の1日が返されます。したがって実行結果は"12-04-01"となります。
・SELECT LAST_DAY('12-03-01') + 1 FROM dual;
LAST_DAY関数で当月の最終日を求めると"12-03-31"となります。その後で1日を加算しているので、翌日の"12-04-01"が返されます。
・SELECT NEXT_DAY('12-03-26', '日') FROM dual;
"12-03-26"は月曜日です。NEXT_DAY関数で翌日以降で最初の日曜日が返されます。したがって実行結果は"12-04-01"となります。
・SELECT ROUND(TO_DATE('12-04-10'), 'DD') FROM dual;
TO_DATE('12-04-10')では時刻は午前0時に設定されます。ROUND関数の書式に"DD"が指定されているので、丸めて当日の午前0時が返されます(つまり変化なし)。したがって実行結果は"12-04-10"となります。
・SELECT TRUNC(TO_DATE('12-04-10'), 'DD') FROM dual;
TO_DATE('12-04-10')では時刻は午前0時に設定されます。TRUNC関数の書式に"DD"が指定されているので、切り捨てて当日の午前0時が返されます(つまり変化なし)。したがって実行結果は"12-04-10"となります。
・SELECT ADD_MONTHS('12-01-01', 4) FROM dual;
"12-01-01"の4ヶ月後ですので、実行結果は"12-05-01"となります。
以上より、
・SELECT ROUND(TO_DATE('12-04-10'), 'MONTH') FROM dual;
・SELECT LAST_DAY('12-03-01') + 1 FROM dual;
・SELECT NEXT_DAY('12-03-26', '日') FROM dual;
が正解となります。
正解のSQL文の実行結果は次のようになります。
FROM dual;

FROM dual;

FROM dual;
参考:
主な日付関数は次のとおりです。

26481の答え
・SELECT NEXT_DAY('12-03-26', '日') FROM dual;
"12-03-26"は月曜日です。NEXT_DAY関数で翌日以降で最初の日曜日が返されます。したがって実行結果は"12-04-01"となります。
これって答えは4月2日ではないですか?
問題文
実行結果が"12-04-01"と表示されるのはどの問い合わせですか(該当するものを全て選択して下さい)。
ただし、データベースの実行環境は日本語環境とし、日付書式はRR-MM-DDとします。
※ 2012年3月26日は月曜日です。
27日(火)
28日(水)
29日(木)
30日(金)
31日(土)
4/1日(日)
コメント
この投稿に対して返信しませんか?