ほぼ全ての機能を新サイトへ移行しました

問題ID: 19840 質問

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2015-12-4 13:32
yoshizawa11  新米   投稿数: 2
arashi1977さん

言語を米語にしたら実行することができました。
回答して頂きありがとうございます。助かりました。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2015-12-4 11:56
arashi1977  長老 居住地: 広島  投稿数: 1715
これは実行環境によるのかもしれません。

Oracle® Database SQL言語リファレンス
11gリリース2 (11.2) TO_DATE
https://docs.oracle.com/cd/E16338_01/server.112/b56299/functions203.htm#i1003589
引用:
'nlsparam'引数には、日付に変換されるテキスト文字列の言語を指定します。この引数は、次の書式で指定します。

'NLS_DATE_LANGUAGE = language'
実行例で言えば
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> SELECT SYSDATE - TO_DATE('1999-Apr-01', 'YYYY-Mon-DD') FROM dual;
SELECT SYSDATE - TO_DATE('1999-Apr-01', 'YYYY-Mon-DD') FROM dual
                         *
行1でエラーが発生しました。:
ORA-01843: 指定した月が無効です。


SQL> SELECT SYSDATE - TO_DATE('1999-Apr-01', 'YYYY-Mon-DD', 'NLS_DATE_LANGUAGE=ENGLISH') FROM dual;

SYSDATE-TO_DATE('1999-APR-01','YYYY-MON-DD','NLS_DATE_LANGUAGE=ENGLISH')
------------------------------------------------------------------------
							      6091.49588
私の環境も日本語で動作させているのですが、「Apr」という月の表現は日本語環境ではありえないので、ORA-01843が返ってきているんですね。

実試験では世界共通の問題を使うと思いますので、言語環境が英語、という前提で考えればよいのではないでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2015-12-4 11:02
yoshizawa11  新米   投稿数: 2
現在の日付は2012年06月23日です。
1999年4月1日から現在までの日数を求めるには、どのSQL文を実行しますか(該当するものをすべて選択してください)。
ただし、実行環境は英語環境とし、デフォルトの日付の表示形式は「RR-MM-DD」とします。

(1)SELECT SYSDATE - TO_DATE('99-04-01', 'YY-MM-DD') FROM dual;
(2)○SELECT SYSDATE - TO_DATE('99-04-01', 'RR-MM-DD') FROM dual;
(3)○SELECT TO_DATE(SYSDATE, 'RR-MM-DD') - TO_DATE('99-04-01', 'RR-MM-DD') FROM dual;
(4)SELECT SYSDATE - TO_DATE('01-Apr-99') FROM dual;
(5)○SELECT SYSDATE - TO_DATE('1999-Apr-01', 'YYYY-Mon-DD') FROM dual;
(6)SELECT TO_CHAR(SYSDATE) - '99-04-01' FROM dual;

解説
日付値から日付値を減算すると、2つの日付間の日数を求めることができます。
設問では「1999年4月1日」から現在までに経過した日数を求めるので、2つの日付の日付値を取得し、減算を行います。

現在の日付の日付値はSYSDATE関数で取得することができ、「1999年4月1日」の日付値はTO_DATE関数を使用して日付値を取得します。

以上より、
・SELECT SYSDATE - TO_DATE('99-04-01', 'RR-MM-DD') FROM dual;
・SELECT SYSDATE - TO_DATE('1999-Apr-01', 'YYYY-Mon-DD') FROM dual;
・SELECT TO_DATE(SYSDATE, 'RR-MM-DD') - TO_DATE('99-04-01', 'RR-MM-DD') FROM dual;
が正解となります。



この問題の(5)がなぜ正解になるのか分かりません。
実際に実行してみても「指定した月が無効です」のエラーが出ます。
日付書式がデフォルトと異なっているので実行できないのではないのですか?

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.
ログイン
ユーザ名 or E-Mailアドレス:

パスワード:







プレミアムコンテンツ

受験チケット(割引)

Contact

LPI-Japan Logo

LPI Logo