助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26806
問題を開く
次のSQL文の実行結果として、正しいものはどれですか。
ただし、実行環境は日本語環境とします。

 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文の実行結果は次のようになります。


 
SQLを表示
SELECT TO_DATE('2012-05-21')
FROM dual;


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


 
SQLを表示
SELECT TO_DATE('21-05-2012')
FROM dual;


その他の選択肢については次のとおりです。

・日付書式が指定されていないため、エラーとなる
・NLSパラメータが指定されていないため、エラーとなる
TO_DATE関数の日付書式やNLSパラメータは省略可能です、省略された場合はセッションのデフォルト値が適用されます。

・正常に実行され、「12/05/21」が表示される
デフォルトの日付書式は年月日を「/」ではなく「-」で区切ります。

参考

TO_DATE関数は、文字列を指定された書式に従って日付値に変換する関数です。
書式は以下の通りです。

 TO_DATE(文字列 [, '日付書式'] [, NLSパラメータ])

 
 
SQLを表示
SELECT TO_DATE('2012-5-21', 'YYYY-MM-DD')
FROM dual;


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



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


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



 
SQLを表示
SELECT TO_DATE('2012年5月21日', 'YYYY年MM月DD日')
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;



 
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;
上に戻る

解説がおかしい

投稿日 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 さん、 ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。

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