sql >> Databáze >  >> RDS >> Oracle

ORA-01840:vstupní hodnota není dostatečně dlouhá pro formát data v Oracle Insert pomocí Select

Nemůžete vložit datum „ve formátu“. Data mají interní reprezentaci, vždy obsahují všechny komponenty data/času a lze je pak formátovat pro zobrazení, jak chcete.

Řetězec, který generujete jako RRRRMM, je vložením implicitně převeden na datum, protože to je datový typ cílového sloupce. Tento implicitní převod používá vaše nastavení NLS a od toho očekává delší hodnotu, aby odpovídala formátu data NLS. Váš řetězec neodpovídá tomuto implicitnímu formátu, což způsobuje chybu, kterou vidíte.

Pokud vás zajímá pouze rok a měsíc, nejbližší možnost je uložit si půlnoc prvního v měsíci, což můžete získat pomocí 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;

Také jsem odstranil přebytečný to_date volání. Měli byste také zvážit přechod na syntaxi spojení ANSI.

Poté můžete formátovat c_date jako RRRRMM, který se zobrazí při dotazu, pokud to potřebujete, pomocí to_char .



  1. 1064:Chyba syntaxe SQL při provádění dotazu PyMySQL

  2. Rails 5 SQL Injection

  3. získat hodnoty z tabulky pouze pro konkrétní den v mysql

  4. Jak vrátit obyčejnou hodnotu z dotazu Knex / Postgresql?