- ベストアンサー
TO_DATE関数について
TO_DATE関数を使用して文字を日付型に変換して表示させようと打っているのですが、エラーが出て困っています。 どこが間違っているのでしょうか? 回答のほど宜しくお願いいたします。 1 select to_date('1/OCT/2004', 'DD/MON/YYYY') 2* from dual SQL> / select to_date('1/OCT/2004', 'DD/MON/YYYY') * 行1でエラーが発生しました。: ORA-01843: 指定した月が無効です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
テリトリが日本だと思いますから'MON'の部分は 10月と指定しないとエラーになってしまいます。 日付の言語指定は変更可能ですので、OCT が使用したい場合には、以下を参考にしてください。 SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD'; セッションが変更されました。 SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='JAPANESE'; セッションが変更されました。 SQL> SELECT TO_CHAR(SYSDATE, 'YYYY/MON/DD') FROM DUAL; TO_CHAR(SYSDATE,'YYYY/MON/DD') -------------------------------- 2005/9月 /17 SQL> SELECT TO_DATE('01/10月/2005', 'DD/MON/YYYY') FROM DUAL; TO_DATE('0 ---------- 2005/10/01 SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; セッションが変更されました。 SQL> SELECT TO_CHAR(SYSDATE, 'YYYY/MON/DD') FROM DUAL; TO_CHAR(SYSDATE,'YYYY/MON/DD ---------------------------- 2005/SEP/17 SQL> SELECT TO_DATE('01/OCT/2005', 'DD/MON/YYYY') FROM DUAL; TO_DATE('0 ---------- 2005/10/01
その他の回答 (3)
- skink
- ベストアンサー率38% (7/18)
#1です。お役に立てず申し訳ない。 ウチの環境では問題なく表示されたんですが、#2さんのおっしゃるようなこともあるんですね。 ちなみに、kyujikun さんの環境はどんなだったのでしょうか?参考までに教えていただければ。
お礼
#2さんの言うとおりにすればうまくできました。 私の環境はXPproで、OracleのSQL*Plusの10gを使用しています。 ご参考になれば幸いです。
- MZ-80B
- ベストアンサー率56% (46/81)
#2 です。確認してみると SELECT TO_DATE('01/OCT/2005','DD/MON/YYYY','NLS_DATE_LANGUAGE=AMERICAN') FROM DUAL; という方法もありました。こちらの方が簡単でしたね。
- skink
- ベストアンサー率38% (7/18)
こんにちは。 書式が違う? select to_date('1-OCT-2004','DD-MM-YYYY') FROM DUAL; でいかがでしょうか?
補足
回答ありがとうございます。 実行すると以下のようなエラーが出現しました。 「数値を指定する箇所に数値でないものが指定されています」 とありますが、OCTがマズイのでしょうか? 参考書などにはこういう記述もありますが。 よろしければ回答のほど宜しくお願い致します。 SQL> select to_date('1-OCT-2004','DD-MM-YYYY') FROM DUAL; select to_date('1-OCT-2004','DD-MM-YYYY') FROM DUAL * 行1でエラーが発生しました。: ORA-01858: 数値を指定する箇所に数値でないものが指定されています
お礼
回答ありがとうございます。 ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; と打った後に SQL> SELECT TO_DATE('01/OCT/2005', 'DD/MON/YYYY') FROM DUAL; とすればきちんと結果が返ってきました。 どうもありがとうございます。