Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-01840:giá trị đầu vào không đủ dài cho định dạng ngày tháng trong Oracle Chèn bằng Chọn

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Trigger để cập nhật cùng một bảng

  2. 4 Ví dụ về khối ẩn danh PL / SQL

  3. Hàm ASIN () trong Oracle

  4. Thu hồi các đặc quyền trong Oracle

  5. Cách xuất dữ liệu trường clob trong nhà phát triển sql oracle