Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-01840:valore di input non sufficientemente lungo per il formato della data in Oracle Inserisci utilizzando Seleziona

Non puoi inserire una data "con un formato". Le date hanno una rappresentazione interna, hanno sempre tutti i componenti di data/ora e possono quindi essere formattate per la visualizzazione come preferisci.

La stringa che stai generando come AAAAMM viene convertita implicitamente in una data dall'inserimento, poiché questo è il tipo di dati della colonna di destinazione. Quella conversione implicita utilizza le tue impostazioni NLS e da ciò si aspetta un valore più lungo che corrisponda al formato della data NLS. La tua stringa non corrisponde a quel formato implicito, che sta causando l'errore che stai vedendo.

Se sei interessato solo all'anno e al mese, il più vicino che puoi ottenere è memorizzare la mezzanotte del primo del mese, che puoi ottenere 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;

Ho anche rimosso l'extra to_date chiamata. Dovresti considerare di passare anche alla sintassi di join ANSI.

Puoi quindi formattare c_date come AAAAMM da visualizzare quando lo richiedi, se è quello che ti serve, tramite to_char .