1.
To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
menyebabkan masalah. ketika Anda menggunakan to_date tanpa format waktu, Oracle akan menggunakan format NLS sesi saat ini untuk mengonversi, yang dalam kasus Anda mungkin bukan "DD/MM/YYYY". Periksa ini...
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.
Lebih penting lagi, Mengapa Anda mengonversi ke char dan kemudian menjadi saat ini, alih-alih membandingkan langsung
MaxDate = REP_DATE
Jika Anda ingin mengabaikan komponen waktu di MaxDate sebelum perbandingan, Anda harus menggunakan..
trunc(MaxDate ) = rep_date
sebagai gantinya.
==Pembaruan :berdasarkan pertanyaan yang diperbarui.
Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00
Saya pikir masalahnya lebih kompleks. jika rep_time dimaksudkan sebagai waktu saja, maka Anda tidak dapat menyimpannya dalam database sebagai tanggal. Itu harus berupa string atau tanggal ke interval waktu atau numerik sebagai detik (terima kasih kepada Alex, lihat ini ) . Jika memungkinkan, saya sarankan menggunakan satu kolom rep_date yang memiliki tanggal dan waktu dan membandingkannya dengan kolom tanggal maksimum secara langsung.
Jika ini adalah sistem yang berjalan dan Anda tidak memiliki kendali atas pembaruan, Anda dapat mencoba ini.
trunc(rep_date) = trunc(maxdate) and
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')
Bagaimanapun, waktu disimpan dengan tidak benar (seperti yang Anda ketahui dari tahun 1753) dan mungkin ada masalah lain di masa mendatang.