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

ORA-01840:nilai input tidak cukup panjang untuk format tanggal di Oracle Insert menggunakan Select

Anda tidak dapat memasukkan tanggal 'dengan format'. Tanggal memiliki representasi internal, mereka selalu memiliki semua komponen tanggal/waktu dan kemudian dapat diformat untuk ditampilkan sesuai keinginan Anda.

String yang Anda hasilkan sebagai YYYYMM secara implisit dikonversi ke tanggal oleh sisipan, karena itu adalah tipe data kolom target. Konversi implisit itu menggunakan pengaturan NLS Anda, dan dari situ mengharapkan nilai yang lebih panjang agar sesuai dengan format tanggal NLS. String Anda tidak cocok dengan format implisit tersebut, yang menyebabkan kesalahan yang Anda lihat.

Jika Anda hanya tertarik pada tahun dan bulan maka yang paling dekat yang bisa Anda dapatkan adalah menyimpan tengah malam di awal bulan, yang bisa Anda dapatkan dengan trunc :

INSERT INTO CS_LOG(NAME, ID, C_DATE)
Select MAX(ML.NAME), ML.ID, TRUNC(CHK_DATE,'MM')
from D_ID ML,CS_LOG MD
WHERE ML.NAME != MD.NAME and ML.ID != MD.ID
and MD.C_DATE = LAST_DAY(sysdate)
GROUP BY ML.ID,C_DATE;

Saya juga telah menghapus to_date tambahan panggilan. Anda juga harus mempertimbangkan untuk beralih ke sintaks gabungan ANSI.

Anda kemudian dapat memformat c_date sebagai YYYYMM untuk ditampilkan saat Anda menanyakannya, jika itu yang Anda butuhkan, melalui to_char .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penggunaan Oracle tipe data PANJANG secara ilegal

  2. Apakah Oracle SYS_GUID() UUID RFC 4122 sesuai?

  3. Perbarui formulir Apex Tabular dengan PLSQL

  4. Bagaimana cara mengurangi duplikasi kode yang disebabkan oleh substring dan instring?

  5. Skrip mulai dan hentikan EBS R12