sql >> データベース >  >> RDS >> Oracle

ORA-01840:Selectを使用したOracleInsertの日付形式に十分な長さの入力値がありません

    「フォーマット付き」の日付を挿入することはできません。日付には内部表現があり、常にすべての日付/時刻コンポーネントがあり、必要に応じて表示できるようにフォーマットできます。

    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として、必要な場合は 。



    1. PHPのOCI8/Oracle oci_bind_array_by_nameが機能しないのはなぜですか?

    2. SHOWTABLESクエリを制限する方法

    3. JavaScriptOracleAPEXを介してモーダルダイアログを開く

    4. 名前に角かっこが含まれているSQLServerの名前を変更するにはどうすればよいですか?