助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26481
問題を開く
実行結果が"12-04-01"と表示されるのはどの問い合わせですか(該当するものを全て選択して下さい)。
ただし、データベースの実行環境は日本語環境とし、日付書式は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文の実行結果は次のようになります。


 

SQLを表示
SELECT ROUND(TO_DATE('12-04-10'), 'MONTH')
FROM dual;



 
SQLを表示
SELECT LAST_DAY('12-03-01') + 1
FROM dual;



 
SQLを表示
SELECT NEXT_DAY('12-03-26', '日')
FROM dual;


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

上に戻る

26481の答え

公開日 2023/01/08

・SELECT NEXT_DAY('12-03-26', '日') FROM dual;
"12-03-26"は月曜日です。NEXT_DAY関数で翌日以降で最初の日曜日が返されます。したがって実行結果は"12-04-01"となります。

これって答えは4月2日ではないですか?

2023/01/10 17:05

問題文
実行結果が"12-04-01"と表示されるのはどの問い合わせですか(該当するものを全て選択して下さい)。
ただし、データベースの実行環境は日本語環境とし、日付書式はRR-MM-DDとします。
※ 2012年3月26日は月曜日です。
27日(火)
28日(水)
29日(木)
30日(金)
31日(土)
4/1日(日)


コメント

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?