sql >> Base de Datos >  >> RDS >> Oracle

ORA-01840:el valor de entrada no es lo suficientemente largo para el formato de fecha en Oracle Insert usando Seleccionar

No puede insertar una fecha 'con un formato'. Las fechas tienen una representación interna, siempre tienen todos los componentes de fecha/hora y luego pueden formatearse para mostrarse como quieras.

La cadena que está generando como AAAAMM se convierte implícitamente en una fecha mediante la inserción, ya que ese es el tipo de datos de la columna de destino. Esa conversión implícita está utilizando su configuración de NLS, y de eso espera un valor más largo para que coincida con el formato de fecha de NLS. Su cadena no coincide con ese formato implícito, lo que está causando el error que está viendo.

Si solo está interesado en el año y el mes, lo más cercano que puede obtener es almacenar la medianoche del primer día del mes, que puede obtener con 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;

También eliminé el extra to_date llamar. También debería considerar cambiar a la sintaxis de combinación ANSI.

Luego puede formatear c_date como YYYYMM para mostrar cuando lo consulte, si eso es lo que necesita, a través de to_char .