助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26806
問題を開く
次のSQL文の実行結果として、正しいものはどれですか。
ただし、実行環境は日本語環境とします。
SELECT TO_DATE('2012-05-21') FROM dual;
ただし、実行環境は日本語環境とします。
SELECT TO_DATE('2012-05-21') FROM dual;
正解
正常に実行され、「12-05-21」が表示される
解説
TO_DATE関数の日付書式やNLSパラメータは省略可能です、省略された場合はセッションのデフォルト値が適用されます。
日本語環境で日付書式のデフォルト値は「RR-MM-DD」ですので、設問のSQL文は正常に実行され、「12-05-21」が表示されます。
以上より、
・正常に実行され、「12-05-21」が表示される
が正解となります。
設問のSQL文の実行結果は次のようになります。

引数を「21-05-2012」に変更すると、デフォルトの日付書式と異なるフォーマットになるため、エラーとなります。

その他の選択肢については次のとおりです。
・日付書式が指定されていないため、エラーとなる
・NLSパラメータが指定されていないため、エラーとなる
TO_DATE関数の日付書式やNLSパラメータは省略可能です、省略された場合はセッションのデフォルト値が適用されます。
・正常に実行され、「12/05/21」が表示される
デフォルトの日付書式は年月日を「/」ではなく「-」で区切ります。
日本語環境で日付書式のデフォルト値は「RR-MM-DD」ですので、設問のSQL文は正常に実行され、「12-05-21」が表示されます。
以上より、
・正常に実行され、「12-05-21」が表示される
が正解となります。
設問のSQL文の実行結果は次のようになります。

SQLを表示
SELECT TO_DATE('2012-05-21')
FROM dual;
FROM dual;
引数を「21-05-2012」に変更すると、デフォルトの日付書式と異なるフォーマットになるため、エラーとなります。

SQLを表示
SELECT TO_DATE('21-05-2012')
FROM dual;
FROM dual;
その他の選択肢については次のとおりです。
・日付書式が指定されていないため、エラーとなる
・NLSパラメータが指定されていないため、エラーとなる
TO_DATE関数の日付書式やNLSパラメータは省略可能です、省略された場合はセッションのデフォルト値が適用されます。
・正常に実行され、「12/05/21」が表示される
デフォルトの日付書式は年月日を「/」ではなく「-」で区切ります。
参考
TO_DATE関数は、文字列を指定された書式に従って日付値に変換する関数です。
書式は以下の通りです。
TO_DATE(文字列 [, '日付書式'] [, NLSパラメータ])

日付書式は文字列を日付値に変換する際のフォーマットです。日付書式に使用できる主な要素は次のとおりです。

日付書式には上記の要素の他に「-」,「/」,「.」,「:」などの半角記号を含めることができ、それらはそのまま表示されます。
アルファベットやひらがな、漢字などを日付書式に含めたい場合は二重引用符(")で囲んで指定します。二重引用符(")で囲んでいない場合はエラーとなります。


なお、日付書式が省略された場合は、セッションのデフォルトの日付書式が使用されます。NLSパラメータが省略された場合も、セッションのデフォルト値が使用されます。
[日付書式要素 YY と RR の違い]
日付書式の要素である「YY」と「RR」はどちらも年の下2桁を表しますが、世紀の取扱に違いがあります。

現在の年が2012年の場合に、日付書式を「YY」、「RR」、値を15、75とすると、それぞれ次のようになります。


書式は以下の通りです。
TO_DATE(文字列 [, '日付書式'] [, NLSパラメータ])

SQLを表示
SELECT TO_DATE('2012-5-21', 'YYYY-MM-DD')
FROM dual;
FROM dual;
日付書式は文字列を日付値に変換する際のフォーマットです。日付書式に使用できる主な要素は次のとおりです。

日付書式には上記の要素の他に「-」,「/」,「.」,「:」などの半角記号を含めることができ、それらはそのまま表示されます。
アルファベットやひらがな、漢字などを日付書式に含めたい場合は二重引用符(")で囲んで指定します。二重引用符(")で囲んでいない場合はエラーとなります。

SQLを表示
SELECT TO_DATE('2012年5月21日', 'YYYY"年"MM"月"DD"日"')
FROM dual;
FROM dual;

SQLを表示
SELECT TO_DATE('2012年5月21日', 'YYYY年MM月DD日')
FROM dual;
FROM dual;
なお、日付書式が省略された場合は、セッションのデフォルトの日付書式が使用されます。NLSパラメータが省略された場合も、セッションのデフォルト値が使用されます。
[日付書式要素 YY と RR の違い]
日付書式の要素である「YY」と「RR」はどちらも年の下2桁を表しますが、世紀の取扱に違いがあります。

現在の年が2012年の場合に、日付書式を「YY」、「RR」、値を15、75とすると、それぞれ次のようになります。

SQLを表示
SELECT TO_CHAR(TO_DATE('15/12/31', 'YY/MM/DD'), 'YYYY/MM/DD')
FROM dual;
SELECT TO_CHAR(TO_DATE('75/12/31', 'YY/MM/DD'), 'YYYY/MM/DD')
FROM dual;
FROM dual;
SELECT TO_CHAR(TO_DATE('75/12/31', 'YY/MM/DD'), 'YYYY/MM/DD')
FROM dual;

SQLを表示
SELECT TO_CHAR(TO_DATE('15/12/31', 'RR/MM/DD'), 'YYYY/MM/DD')
FROM dual;
SELECT TO_CHAR(TO_DATE('75/12/31', 'RR/MM/DD'), 'YYYY/MM/DD')
FROM dual;
FROM dual;
SELECT TO_CHAR(TO_DATE('75/12/31', 'RR/MM/DD'), 'YYYY/MM/DD')
FROM dual;
解説がおかしい
投稿日 2025/03/15
日本語環境で日付書式のデフォルト値は「RR-MM-DD」ですので、設問のSQL文は正常に実行され、「2012-05-21」が表示されます。
以上より、
・正常に実行され、「12-05-21」が表示される
が正解となります。
「2012-05-21」が表示され・・・・以上より「12-05-21」が表示される。
どっち????
スタッフからの返信
この投稿に対して返信しませんか?
s staff_ishii
2025/03/17 11:25
ZweiDJiro さん、 ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。