助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26804
問題を開く
日付値を次の表示形式で表示するSQL文として、正しいものはどれですか。
ただし、実行環境は英語環境とします。
ただし、実行環境は英語環境とします。
Eighteenth of June , 2012
正解
SELECT TO_CHAR(SYSDATE, 'Ddspth "of" Month, YYYY') FROM dual;
解説
設問の表示では、日の表示がスペル表記かつ順序表記、月の表示が省略形ではない月の名前、年の表示が数値表記で、「日 of 月, 年」というように表示されています。
日をスペル表記かつ順序表記にするためには、日付書式要素「Dd」にスペル表記を表す接尾辞「sp」と順序表記を表す「th」を指定します。
月は省略形ではない月の名前で表示されていますので、「Month」を指定し、年は4桁ですので、「YYYY」を指定します。
また、書式中に文字列を含める場合は、含める文字列を二重引用符(")で囲んで指定します。
以上より、
・SELECT TO_CHAR(SYSDATE, 'Ddspth "of" Month, YYYY') FROM dual;
が正解となります。
正解のSQL文の実行結果は次のようになります。
※日本語環境の場合は、事前に以下のSQL文を実行してセッションを英語環境に変更して下さい。
ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';

その他の選択肢については次のとおりです。
・SELECT TO_CHAR(SYSDATE, 'spthDd "of" Month, YYYY') FROM dual;
「SP」,「TH」などは日付書式要素の後ろに指定します。前に指定するとエラーとなります。
・SELECT TO_CHAR(SYSDATE, 'Ddth "of" Month, YYYY') FROM dual;
「th」のみ指定されているため「18th」のように順序表記で表示されます。

・SELECT TO_CHAR(SYSDATE, 'Ddsp "of" Month, YYYY') FROM dual;
「sp」のみ指定されているため「Eighteen」のようにスペル表記で表示されます。
日をスペル表記かつ順序表記にするためには、日付書式要素「Dd」にスペル表記を表す接尾辞「sp」と順序表記を表す「th」を指定します。
月は省略形ではない月の名前で表示されていますので、「Month」を指定し、年は4桁ですので、「YYYY」を指定します。
また、書式中に文字列を含める場合は、含める文字列を二重引用符(")で囲んで指定します。
以上より、
・SELECT TO_CHAR(SYSDATE, 'Ddspth "of" Month, YYYY') FROM dual;
が正解となります。
正解のSQL文の実行結果は次のようになります。
※日本語環境の場合は、事前に以下のSQL文を実行してセッションを英語環境に変更して下さい。
ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';

SQLを表示
ALTER SESSION SET nls_date_language = 'AMERICAN';
SELECT TO_CHAR(SYSDATE, 'Ddspth "of" Month, YYYY') FROM dual;
SELECT TO_CHAR(SYSDATE, 'Ddspth "of" Month, YYYY') FROM dual;
その他の選択肢については次のとおりです。
・SELECT TO_CHAR(SYSDATE, 'spthDd "of" Month, YYYY') FROM dual;
「SP」,「TH」などは日付書式要素の後ろに指定します。前に指定するとエラーとなります。
・SELECT TO_CHAR(SYSDATE, 'Ddth "of" Month, YYYY') FROM dual;
「th」のみ指定されているため「18th」のように順序表記で表示されます。

・SELECT TO_CHAR(SYSDATE, 'Ddsp "of" Month, YYYY') FROM dual;
「sp」のみ指定されているため「Eighteen」のようにスペル表記で表示されます。

参考
TO_CHAR関数は、数値や日付値を指定された書式に従って文字列に変換する関数です。
第1引数に日付値が指定された場合は、日付値を文字列へ変換します。
書式は以下の通りです。
TO_CHAR(日付値 [, '日付書式'] [, NLSパラメータ])

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

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


なお、日付書式が省略された場合は、セッションのデフォルトの日付書式が使用されます。NLSパラメータが省略された場合も、セッションのデフォルト値が使用されます。
また、TO_CHAR関数に指定する日付書式要素の「DAY」,「DY」,「MONTH」,「MON」などは、SQLを実行する環境の言語環境によって表示される文字列が異なります。


また、第3引数にNLSパラメータを指定することで、関数内で使用する言語環境を任意の環境に変更することができます。

なお、日付書式の大文字、小文字は区別されます。英語環境では日付書式要素を小文字で指定した場合、表示される結果も小文字となります。

[数値で表示される要素の表記の変更]
結果が数値で表示される日付書式要素の後ろに、「TH」や「SP」などの接尾辞を指定すると、結果を順序表記に変更したり、スペル表記に変更したりすることができます。
数値で表示される日付書式要素の後ろに指定できる接尾辞は次の通りです。


[埋め込みモード]
日付書式要素の「DD」や「MONTH」などでは、数値が1桁の場合に先頭に0付きで表示されたり、文字の前後にスペース付きで表示されます。

これは、埋め込みモードが有効となっているためで(デフォルトで有効となっています)、「FM」要素を指定することで埋め込みモードの有効/無効を切り替える事ができます。

「FM」を指定すると、指定した箇所から以降の日付書式に対して指定したことになります。また「FM」を複数指定すると、指定のたびに埋め込みモードが切り替わります。

第1引数に日付値が指定された場合は、日付値を文字列へ変換します。
書式は以下の通りです。
TO_CHAR(日付値 [, '日付書式'] [, NLSパラメータ])

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

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

SQLを表示
SELECT TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日"')
FROM dual;
FROM dual;

SQLを表示
SELECT TO_CHAR(SYSDATE, 'YYYY年MM月DD日')
FROM dual;
FROM dual;
なお、日付書式が省略された場合は、セッションのデフォルトの日付書式が使用されます。NLSパラメータが省略された場合も、セッションのデフォルト値が使用されます。
また、TO_CHAR関数に指定する日付書式要素の「DAY」,「DY」,「MONTH」,「MON」などは、SQLを実行する環境の言語環境によって表示される文字列が異なります。

SQLを表示
ALTER SESSION SET nls_date_language = 'JAPANESE';
SELECT TO_CHAR(SYSDATE, 'MONTH / MON / DAY / DY')
FROM dual;
SELECT TO_CHAR(SYSDATE, 'MONTH / MON / DAY / DY')
FROM dual;

SQLを表示
ALTER SESSION SET nls_date_language = 'AMERICAN';
SELECT TO_CHAR(SYSDATE, 'MONTH / MON / DAY / DY')
FROM dual;
SELECT TO_CHAR(SYSDATE, 'MONTH / MON / DAY / DY')
FROM dual;
また、第3引数にNLSパラメータを指定することで、関数内で使用する言語環境を任意の環境に変更することができます。

SQLを表示
ALTER SESSION SET nls_date_language = 'JAPANESE';
SELECT TO_CHAR(SYSDATE, 'MONTH / MON / DAY / DY', 'nls_date_language=AMERICAN')
FROM dual;
SELECT TO_CHAR(SYSDATE, 'MONTH / MON / DAY / DY', 'nls_date_language=AMERICAN')
FROM dual;
なお、日付書式の大文字、小文字は区別されます。英語環境では日付書式要素を小文字で指定した場合、表示される結果も小文字となります。

SQLを表示
SELECT TO_CHAR(SYSDATE, 'month / mon / day / dy', 'nls_date_language=AMERICAN')
FROM dual;
FROM dual;
[数値で表示される要素の表記の変更]
結果が数値で表示される日付書式要素の後ろに、「TH」や「SP」などの接尾辞を指定すると、結果を順序表記に変更したり、スペル表記に変更したりすることができます。
数値で表示される日付書式要素の後ろに指定できる接尾辞は次の通りです。


SQLを表示
SELECT TO_CHAR(SYSDATE, 'Dd') "Dd", TO_CHAR(SYSDATE, 'Ddth') "Ddth",
TO_CHAR(SYSDATE, 'Ddsp') "Ddsp", TO_CHAR(SYSDATE, 'Ddthsp') "Ddthsp"
FROM dual;
TO_CHAR(SYSDATE, 'Ddsp') "Ddsp", TO_CHAR(SYSDATE, 'Ddthsp') "Ddthsp"
FROM dual;
[埋め込みモード]
日付書式要素の「DD」や「MONTH」などでは、数値が1桁の場合に先頭に0付きで表示されたり、文字の前後にスペース付きで表示されます。

SQLを表示
SELECT TO_CHAR(SYSDATE, 'Ddth "of" Month, YYYY')
FROM dual;
FROM dual;
これは、埋め込みモードが有効となっているためで(デフォルトで有効となっています)、「FM」要素を指定することで埋め込みモードの有効/無効を切り替える事ができます。

SQLを表示
SELECT TO_CHAR(SYSDATE, 'FMDdth "of" Month, YYYY')
FROM dual;
FROM dual;
「FM」を指定すると、指定した箇所から以降の日付書式に対して指定したことになります。また「FM」を複数指定すると、指定のたびに埋め込みモードが切り替わります。

SQLを表示
SELECT TO_CHAR(SYSDATE, 'fmDdth "of" fmMonth, YYYY')
FROM dual;
FROM dual;
Fmがないからjuneの後ろに空白が必要なのでは?
投稿日 2025/03/22
ID : 26804
履歴
前回出題日時 :
日付値を次の表示形式で表示するSQL文として、正しいものはどれですか。
ただし、実行環境は英語環境とします。
Eighteenth of June , 2012
正解の選択肢
SELECT TO_CHAR(SYSDATE, 'Ddspth "of" Month, YYYY') FROM dual;
r
rink_rew
2025/03/24 12:01
一応空白は入ってるように見えますが、解説に載っている出力結果のキャプチャの通り、本来はもっと空白が長い(月の単語の中で一番長いSeptemberに合わせているらしい)はずではありますね。
ただ、FMをつけた場合は、空白が全くなくなり、月の単語とカンマが隣接するので、正当の選択肢にFMがないこと自体は正しいと言える思います。
SQL> SELECT TO_CHAR(SYSDATE, 'Ddspth "of" Month, YYYY') FROM dual;
TO_CHAR(SYSDATE,'DDSPTH"OF"MONTH,YYYY')
------------------------------------------------------------
Twenty-Third of March , 2025
SQL> SELECT TO_CHAR(SYSDATE, 'Ddspth "of" FMMonth, YYYY') FROM dual;
TO_CHAR(SYSDATE,'DDSPTH"OF"FMMONTH,YYYY')
------------------------------------------------------------
Twenty-Third of March, 2025
SQL>
コメント
スタッフからの返信
この投稿に対して返信しませんか?
s staff_ishii
2025/03/24 15:31
Shibai_Oracle さん、 ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。