助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26826
問題を開く
現在の日時は2012年12月12日午後10時28分35秒です。
現在時刻を次の形式で表示するには、どのSQL文を実行しますか。
ただし、実行環境は日本語環境とします。

 2012年12月12日(水) 午後 10時28分35秒

正解

SELECT TO_CHAR(SYSDATE, 'RRRR"年"MM"月"DD"日 ("DY")" PM HH"時"MI"分"SS"秒"') FROM dual;

解説

選択肢を1つずつ確認してみましょう。

・SELECT TO_CHAR(SYSDATE, 'YYY"年"MM"月"DD"日 ("DY")" PM HH24"時"MI"分"SS"秒"') FROM dual;
年に「YYY」が指定されているため、「012年」のように3桁で表示されます。
また、時刻に「HH24」が指定されているため、「22時」と表示されます。



・SELECT TO_CHAR(SYSDATE, 'RRRR"年"MM"月"DD"日 ("DY")" PM HH"時"MI"分"SS"秒"') FROM dual;
このSQL文では設問の書式通りに表示されます。



・SELECT TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日 ("DAY")" P.M. HH12"時"MI"分"SS"秒"') FROM dual;
曜日に「DAY」が指定されているため、「水曜日」と表示されます。



・SELECT TO_CHAR(SYSDATE, 'RRR"年"MM"月"DD"日 ("DY")" HH12"時"MI"分"SS"秒"') FROM dual;
年を「RRR」と指定しています。「RRR」という要素はないためエラーとなります(「RR」または「RRRR」は有効ですが「RRR」は指定できません)。



以上より、
・SELECT TO_CHAR(SYSDATE, 'RRRR"年"MM"月"DD"日 ("DY")" AM HH"時"MI"分"SS"秒"') FROM dual;
が正解となります。

参考

TO_CHAR関数は、数値や日付値を指定された書式に従って文字列に変換する関数です。
第1引数に日付値が指定された場合は、日付値を文字列へ変換します。
書式は以下の通りです。

 TO_CHAR(日付値 [, '日付書式'] [, NLSパラメータ])

 
 
SQLを表示
SELECT TO_CHAR(SYSDATE, 'YY-MM-DD HH24:MI:SS')
FROM dual;


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



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


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



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



 
SQLを表示
ALTER SESSION SET nls_date_language = 'AMERICAN';

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;


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


 
SQLを表示
SELECT TO_CHAR(SYSDATE, 'month / mon / day / dy', 'nls_date_language=AMERICAN')
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;


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


 
SQLを表示
SELECT TO_CHAR(SYSDATE, 'Ddth "of" Month, YYYY')
FROM dual;


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


 
SQLを表示
SELECT TO_CHAR(SYSDATE, 'FMDdth "of" Month, YYYY')
FROM dual;


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


 
SQLを表示
SELECT TO_CHAR(SYSDATE, 'fmDdth "of" fmMonth, YYYY')
FROM dual;
上に戻る

Oracle Silver SQLの時刻表示に関して

投稿日 2023/03/25

お世話になります。
Oracle Silver SQLの時刻表示の問題に関して、2012年12月12日(水) 午後 10時28分35秒を表示させるSQL文なのですが、
正解は「SELECT TO_CHAR(SYSDATE, 'RRRR"年"MM"月"DD"日 ("DY")" AM HH"時"MI"分"SS"秒"') FROM dual;」です。
ただ、午後なのでPMだと思うのですが、AMでも午後を表示できるのでしょうか。
お手数お掛けしますがご確認の程お願い致します。

2023/03/31 23:35

修正したらしいですが、AMで指定してもPMで指定してもどちらでも午前、午後が時刻に合わせて表示されるので、元々の問題であってます。


コメント

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

スタッフからの返信

s staff

2023/03/29 16:43

ren4219さん ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。

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