1

ユーザーから日付値を入力して、その値をクエリで使用しようとしています。

 select * from  TB_MNP_GTY_TRANS_STEPS where CREATE_DATETIME>=&startdate

Toad で sql ステートメントを実行し、2012 年 8 月 1 日を日付データ型として入力すると、次のようになります。

ORA-00932: データ型に一貫性がありません: 予想されるDATEはNUMBERになりました

誰かが私が間違っている場所を提案できますか.CREATE_DATETIMEは日付型であることに注意してください.

4

2 に答える 2

2

パラメータで使用している日付形式を実際に指定する必要があります。

SELECT *
  FROM TB_MNP_GTY_TRANS_STEPS 
 where CREATE_DATETIME >= TO_DATE(&startdate, 'DD/MM/YYYY');

ここで日付形式について読む

現在、セッションでは、日付がデフォルトのNLS_DATEのデフォルトの形式であることが期待されており、入力する日付の形式が明らかに異なります。日付形式を明示的に指定すると、この問題は発生しなくなります。

それが役に立てば幸い...

編集: 2012年1月8日に渡す場合は、変数値を次のように指定できます。

08/01/2012

そして、あなたの選択は次のようになります:

SELECT *
  FROM TB_MNP_GTY_TRANS_STEPS 
 where CREATE_DATETIME >= TO_DATE(&startdate, 'DD/MM/YYYY');

環境によっては、変数を一重引用符で囲む必要がある場合があります(TOADの場合は間違いなくそうします)。

SELECT *
  FROM TB_MNP_GTY_TRANS_STEPS 
 where CREATE_DATETIME >= TO_DATE('&startdate', 'DD/MM/YYYY');

表示されるエラーは、入力している日付文字列の形式が、指定している形式と完全に一致していないことが原因です(日と月の前と0前の先頭の ""を参照してください!)81

于 2012-08-01T12:50:30.393 に答える
1

日付キャストが必要

select * from  TB_MNP_GTY_TRANS_STEPS where CREATE_DATETIME>=to_date(&startdate, 'MM-DD-YYYY')

パラメータを渡すときは、「1999年8月9日」のようにクォーツで値を渡す必要があります。

于 2012-08-01T12:51:25.260 に答える