1
SELECT pd_end_dt,nrx_cnt
FROM wkly_lnd.lnd_wkly_plan_rx_summary
WHERE pd_end_dt >TO_DATE('01/01/2009')

エラーORA-01843が発生しています:有効な月ではありません


私はそれがうまくいった以下を実行しました

SELECT pd_end_dt,nrx_cnt FROM wkly_lnd.lnd_wkly_plan_rx_summary WHERE pd_end_dt > '01-Jan-09'

しかし、週単位のデータが必要な場合はどうすればいいですか

4

4 に答える 4

4

TO_DATEにフォーマット文字列を指定していません。これにより、Oracleが日付を誤って処理する可能性があります。試す

to_date('01/01/2009', 'DD/MM/YYYY')

代わりに(出身地によっては、DDとMMの順序を変更することをお勧めします)。詳細については、TO_DATEフォーマット文字列引数のこの説明を参照してください。

于 2009-08-25T07:16:42.253 に答える
3

試す

TO_DATE('01/01/2009', 'dd/mm/yyyy')
于 2009-08-25T07:15:40.243 に答える
0

耳障りに聞こえないようにOKですが、最初にグーグル検索をしてください。前の回答は機能しますが、より完全な説明については、を参照してください。

http://www.dbmotive.com/oracle_error_codes.php?errcode=01843

あなたがしているようにデフォルトのフォーマットを使用しようとしているなら、あなたはそれが最初に何であるかを知る必要があります

于 2009-08-25T07:29:21.603 に答える
0

次の 2 つの可能性があります。

  1. TO_DATE関数は、デフォルトの日付形式が原因で失敗しています(他の回答はすでにここに記載されています)。

  2. pd_end_dtは日付列ではありません。pd_end_dtクエリは、比較の前に値を日付に変換しようとしており、行の 1 つで失敗しています。

デモンストレーションするには:

SQL> create table t1 (datestrings varchar2(10));
SQL> insert into t1 values ('01/01/2009');
SQL> insert into t1 values ('02/01/2009');
SQL> insert into t1 values ('01/XX/2009');
SQL> select * from t1 where datestrings > '01/01/2009';

DATESTRINGS 
-----------
02/01/2009
01/XX/2009  

2 rows selected

SQL> select * from t1 where datestrings > TO_DATE('01/01/2009');

ORA-01843: not a valid month

SQL> select * from t1 where datestrings > TO_DATE('01/01/2009','DD/MM/YYY');

ORA-01843: not a valid month
于 2009-08-29T10:00:27.800 に答える