Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle:bukan bulan yang valid

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AWS DMS dengan CDC. Catatan pembaruan hanya menyertakan bidang yang diperbarui. Bagaimana cara memasukkan semua?

  2. Oracle TO_DATE TIDAK melempar kesalahan

  3. tidak ada ocijdbc9 di java.library.path

  4. Ubah string yang dibatasi menjadi baris di Oracle

  5. Ikon Pengembang SQL