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

ORA-01840:inputværdi ikke lang nok til datoformat i Oracle Insert ved hjælp af Select

Du kan ikke indsætte en dato 'med et format'. Datoer har en intern repræsentation, de har altid alle dato/tidskomponenter og kan derefter formateres til visning, som du vil.

Den streng, du genererer som ÅÅÅÅMM, bliver implicit konverteret til en dato af indsættelsen, da det er målkolonnens datatype. Den implicitte konvertering bruger dine NLS-indstillinger, og derfra forventes en længere værdi, der matcher NLS-datoformatet. Din streng matcher ikke det implicitte format, som forårsager den fejl, du ser.

Hvis du kun er interesseret i året og måneden, så er det tætteste du kan komme at gemme midnat den første i måneden, hvilket du kan komme med 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;

Jeg har også fjernet den ekstra to_date opkald. Du bør også overveje at skifte til ANSI join-syntaks.

Du kan derefter formatere c_date som ÅÅÅÅMM til visning, når du forespørger på det, hvis det er det, du har brug for, via to_char .



  1. Sådan krydser du en hierarkisk træstruktur baglæns ved hjælp af rekursive forespørgsler

  2. Hvordan opretter jeg en Oracle-tabel med indlejrede tabeller af objekttyper?

  3. Migrer fra MySql til SQL server 2008

  4. Slet rækker med Laravel query builder og LEFT JOIN