0

Oracle 10gでこれを行うと:

select to_date(trunc(SOMEINPUTdATE)) from table1
where to_date(trunc(date_column_timestamp),'MM/DD/YYYY')
  >= to_date('03/11/2011' ,'MM/DD/YYYY')

私が得る: :ORA-01843: not a valid monthに変更すると'YYYY/MM/DD'、動作します。しかし'MM/DD/YYYY'、有効なフォーマットは正しいですか?

4

1 に答える 1

7

あなたは物事を少し混乱させています。TO_DATE は文字列を DATE に変換します。がすでに日付の場合date_column_timestampは、日付に変換する必要はありません。

select trunc(SOMEINPUTdATE) from table1
where trunc(date_column_timestamp)
  >= to_date('03/11/2011' ,'MM/DD/YYYY')

これORA-01843は、日付から文字列への暗黙的な変換が原因です。つまり、次のようになります。

to_date(trunc(date_column_timestamp),'MM/DD/YYYY')

と同等です (デフォルトの日付形式を想定DD-MON-YYYY):

to_date(TO_CHAR(trunc(date_column_timestamp),'DD-MON-YYYY'),'MM/DD/YYYY')

したがって、 は のようなものをTO_CHAR返しますが、日付の形式が一致しないため失敗します。'11-MAR-2011'to_date

selectあなたの句にも同じ問題があります。日付列のto_date周りは必要ありません。trunc

于 2011-03-09T04:54:09.783 に答える