1.
To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
問題を引き起こしています。時間形式なしでto_dateを使用すると、Oracleは現在のセッションのNLS形式を使用して変換します。この場合、「DD / MM/YYYY」ではない可能性があります。これを確認してください...
SQL> select sysdate from dual;
SYSDATE
---------
26-SEP-12
Which means my session's setting is DD-Mon-YY
SQL> select to_char(sysdate,'MM/DD/YYYY') from dual;
TO_CHAR(SY
----------
09/26/2012
SQL> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;
select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual
*
ERROR at line 1:
ORA-01843: not a valid month
SQL> select to_date(to_char(sysdate,'MM/DD/YYYY'),'MM/DD/YYYY') from dual;
TO_DATE(T
---------
26-SEP-12
2.
さらに重要なのは、直接比較するのではなく、なぜ文字に変換してから日付に変換するのですか?
MaxDate = REP_DATE
比較する前にMaxDateの時間コンポーネントを無視する場合は、..
を使用する必要があります。trunc(MaxDate ) = rep_date
代わりに。
==更新:更新された質問に基づいています。
Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00
問題はもっと複雑だと思います。 rep_timeが時間のみを対象としている場合、それを日付としてデータベースに保存することはできません。文字列または日付から時間までの間隔、または秒単位の数値である必要があります(Alexのおかげで、これ )。可能であれば、日付と時刻の両方を含む1つの列rep_dateを使用して、それを最大日付列と直接比較することをお勧めします。
それが実行中のシステムであり、repdateを制御できない場合は、これを試すことができます。
trunc(rep_date) = trunc(maxdate) and
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')
いずれにせよ、時刻は正しく保存されておらず(1753年からわかるように)、今後他の問題が発生する可能性があります。