Bạn không thể chèn ngày "có định dạng". Ngày có đại diện bên trong, chúng luôn có tất cả các thành phần ngày / giờ và sau đó có thể được định dạng để hiển thị theo cách bạn muốn.
Chuỗi mà bạn đang tạo là YYYYMM đang được chèn hoàn toàn chuyển đổi thành ngày, vì đó là kiểu dữ liệu của cột mục tiêu. Chuyển đổi ngầm đó đang sử dụng cài đặt NLS của bạn và từ đó mong đợi giá trị dài hơn để phù hợp với định dạng ngày NLS. Chuỗi của bạn không khớp với định dạng ngầm định đó, điều này gây ra lỗi mà bạn đang thấy.
Nếu bạn chỉ quan tâm đến năm và tháng thì gần nhất bạn có thể nhận được cửa hàng vào nửa đêm của ngày đầu tiên của tháng, bạn có thể nhận được bằng 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;
Tôi cũng đã xóa to_date
thừa cuộc gọi. Bạn cũng nên cân nhắc chuyển sang cú pháp nối ANSI.
Sau đó, bạn có thể định dạng c_date
dưới dạng YYYYMM để hiển thị khi bạn truy vấn nó, nếu đó là thứ bạn cần, qua to_char
.