「フォーマット付き」の日付を挿入することはできません。日付には内部表現があり、常にすべての日付/時刻コンポーネントがあり、必要に応じて表示できるようにフォーマットできます。
YYYYMMとして生成している文字列は、ターゲット列のデータ型であるため、挿入によって暗黙的に日付に変換されます。その暗黙の変換はNLS設定を使用しており、そこからNLS日付形式に一致するより長い値が期待されます。文字列がその暗黙の形式と一致しないため、表示されているエラーが発生しています。
年と月のみに関心がある場合、最も近いのは月の1日の深夜に保存することです。これは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;
余分なto_date
も削除しました 電話。 ANSI結合構文への切り替えも検討する必要があります。
次に、c_date
をフォーマットできます to_char
を介して、クエリを実行するときに表示するYYYYMMとして、必要な場合は 。