こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ORA-01843: 指定した月が無効です。エラー

使用環境
WINXPPro WIN2003SERVER Oracle10g

データベースに数値型の日付があるのですが、これを日付型にして表示しようとすると「ORA-01843: 指定した月が無効です」となってしまいます。

select
B01 as 番号,B02 as 注文先,
to_DATE(to_char(B10, '000000'),'RRMMDD') as 納期,
B03 as 品名,B04 as 型式,B05 as 数量 FROM TYUMON

結果、数件は表示されます
多分、数値が6桁になっているデータだと思います
940101
990201
です。

検索してみて
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
を実行しても結果は同じでした。

よろしくお願いします

投稿日時 - 2008-07-02 12:00:01

QNo.4145381

困ってます

質問者が選んだベストアンサー

B13をすべてチェックしてみてください。
恐らく、年月日にマッチしないデータがあるんだと思います。
例)940101→1994年01月01日 ○
  940000→1994年00月00日 ×
  940132→1994年01月32日 ×
  

以下、試した結果です。

SQL> SELECT TO_DATE(TO_CHAR(940101, '000000'),'RRMMDD') FROM DUAL ;

TO_DATE(
--------
94-01-01


SQL> SELECT TO_DATE(TO_CHAR(940131, '000000'),'RRMMDD') FROM DUAL ;

TO_DATE(
--------
94-01-31


SQL> SELECT TO_DATE(TO_CHAR(940132, '000000'),'RRMMDD') FROM DUAL ;
SELECT TO_DATE(TO_CHAR(940132, '000000'),'RRMMDD') FROM DUAL
*
行1でエラーが発生しました。:
ORA-01847: 月単位の日付は1から月末日の間で指定する必要があります


SQL> SELECT TO_DATE(TO_CHAR(940000, '000000'),'RRMMDD') FROM DUAL ;
SELECT TO_DATE(TO_CHAR(940000, '000000'),'RRMMDD') FROM DUAL
*
行1でエラーが発生しました。:
ORA-01843: 指定した月が無効です。


如何でしょうか。

投稿日時 - 2008-07-03 09:27:20

補足

ありがとうございます。
データ
B02   B13
0011  921
0014   0

SELECT TO_DATE(TO_CHAR(B13,'000000'),'RRMMDD'),B02 FROM NSEKIB where B02 = 0014

B02 = 0011(※)
TO_DATE( B02
-------- ----
00-09-21 0011

B02 = 0014(※)
行1でエラーが発生しました。:
ORA-01843: 指定した月が無効です

もう少し、詳しく見てみますが、おそらくB13が'0'のデータがエラーになっているようです。

投稿日時 - 2008-07-03 09:37:59

お礼

もう少し、詳しく見てみましたらやはりエラーになります。

今度は'0'のデータを削除しました(テストデータなので)が
途中まではうまくいきますがエラーが出てしまいます。

SELECT TO_DATE(TO_CHAR(B13,'000000'),'RRMMDD'),B02 FROM NSEKIB

TO_DATE( B02
-------- ----
97-03-30 0078
98-03-27 0079
98-03-24 0080
98-03-24 0081
98-02-27 0082
98-02-27 0083
98-02-27 0084
98-02-27 0085
98-02-27 0086
98-02-27 0087
ERROR:
ORA-01843: 指定した月が無効です・

1605行が選択されました。

ちなみにSELECT TO_DATE(TO_CHAR(B13,'000000'),'RRMMDD'),B02 FROM NSEKIB order by B13

order by B13をつけると、すべてエラーになります。
ERROR:
ORA-01843: 指定した月が無効です・

投稿日時 - 2008-07-03 10:30:22

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

度々すみません。

下記の2コマンドの結果を教えて頂けないでしょうか。

DESCRIBE NSEKIB
※見たいのはB13の詳細なタイプなのですが。

SELECT B13 FROM NSEKIB WHERE B02 = 0096

お願い致します。

投稿日時 - 2008-07-02 17:30:53

補足

早速、ありがとうございます。
DESCRIBE NSEKIB

名前  NULL? 型
------ -------- -------------
BKEY NOT NULL CHAR(11)
B01      CHAR(7)
B02      CHAR(4)
B03      VARCHAR2(32)
B04      VARCHAR2(50)
B05      NUMBER(6)
B06      VARCHAR2(20)
B12      NUMBER(10)
B13      NUMBER(6)
B14      NUMBER(6)

です。

よろしくお願いします。

投稿日時 - 2008-07-03 08:57:55

ANo.2

一点確認させてください。
> 結果、数件は表示されます
> 多分、数値が6桁になっているデータだと思います
これは、6桁はすべて表示され、それ以外は表示されないと言う事でしょうか。
また、上記とした場合、表示されない時はどういったデータなのでしょうか。
例)2000/01/01 は 000101 ?

投稿日時 - 2008-07-02 15:09:45

補足

早速ありがとうございます。

表示されないのはどんなものか調べていましたが、数値を指定するとうまくいきますが、データ上ではエラーになります。
そこでwhere文で行を指定してみましたらすべてエラーになります。(B02:NO)

SQL> SELECT TO_DATE(TO_CHAR('940101'),'RRMMDD'),B02 FROM NSEKIB where B02 = 0096

TO_DATE( B02
-------- ----
94-01-01 0096

SELECT TO_DATE(TO_CHAR(B13,'000000'),'RRMMDD'),B02 FROM NSEKIB where B02 = 0096

ERROR:
ORA-01843: 指定した月が無効です。
です。
B13は数値型で'940101'になっています。

ちなみに
SQL> SELECT TO_DATE(TO_CHAR('101'),'RRMMDD'),B02 FROM NSEKIB where B02 = 0096

TO_DATE( B02
-------- ----
00-01-01 0096
でOKです。

投稿日時 - 2008-07-02 17:17:17

ANo.1

数値が6桁じゃなくて、8桁なのではないでしょうか。確認してみてください。
環境は若干違いますが、下記の3通りのクエリを試した結果を記載します。
3つ目の関数であれば、うまくいくような気がします。

SQL> SELECT TO_DATE(TO_CHAR(940101,'000000'),'RRMMDD') FROM DUAL ;

TO_DATE(
--------
94-01-01


SQL> SELECT TO_DATE(TO_CHAR(19940101,'000000'),'RRMMDD') FROM DUAL ;

SELECT TO_DATE(TO_CHAR(19940101,'000000'),'RRMMDD') FROM DUAL
*
行1でエラーが発生しました。:
ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要があります


SQL> SELECT TO_DATE(TO_CHAR(19940101,'00000000'),'RRMMDD') FROM DUAL ;

TO_DATE(
--------
94-01-01

投稿日時 - 2008-07-02 12:09:41

補足

早速、返信ありがとうございます。

まず、桁数は6桁になっています。

3つ目の関数で実行しましたら、良い結果になりました。
SELECT TO_DATE(TO_CHAR(19940101,'00000000'),'RRMMDD') FROM DUAL ;

しかし、実際のデータではエラーとなってしましました。
質問で「多分、数値が6桁になっているデータだと思います」
と言いましたが、データを見ると6桁になっているのに途中でエラーとなっているようです。
940125
940127

投稿日時 - 2008-07-02 14:33:43

お礼

回答中すいません。

どうやら、データの中に日付では表せないデータがあるようなのでもう一度このデータをしっかりさせてから質問し直します。

ありがとうございました。

投稿日時 - 2008-07-03 11:11:33

あなたにオススメの質問