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

SQLエラーが発生しました:ORA-01843:有効な月ではありません

    '04/04/2012 13:35 PM' 日付ではなく、文字列です。

    Oracleは暗黙的なTO_DATE( string_value, format_mask )を実行します DATEに挿入するときの非日付リテラル NLS_DATE_FORMATの値を使用する列 フォーマットマスクとしてのセッションパラメータ(注:これはセッションパラメータであり、クライアントに属します。グローバル設定ではありません )。日付以外のリテラルがこの形式と一致する場合は機能します(一致しない場合は機能しません)。ただし、NLS_DATE_FORMATの場合は、 変更されるとすぐに壊れます(機能していたコードは機能しないため、デバッグするのは非常に面倒ですが、誰もコードを変更しません)。

    現在のNLS_DATE_FORMATを確認できます クエリで:

    SELECT VALUE
    FROM   NLS_SESSION_PARAMETERS
    WHERE  PARAMETER = 'NLS_DATE_FORMAT';
    

    TO_DATE()を明示的に使用することをお勧めします 正しいフォーマットマスクを使用するか、ANSI / ISO日付リテラルを使用します(例:DATE '2012-04-04' またはTIMESTAMP '2012-04-04 13:35'

    できること:

    INSERT INTO STORE ( id, opening_time )
      VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );
    

    AM/PMは必要ありません 時間コンポーネントはすでに24時間制になっているため)

    または

    INSERT INTO STORE ( id, opening_time )
      VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );
    

    (Oracleが暗黙的に日付に変換するANSI / ISOタイムスタンプリテラルを使用)



    1. ヒントHINT_PASS_DISTINCT_THROUGHは、PageRequestに対してページごとに返されるエンティティの量を構成されたページサイズ(PostgreSQL)未満に減らします。

    2. MySQLで動的ピボットテーブルを作成する方法

    3. 500内部サーバーエラー?

    4. SQL結果テーブル、2番目のテーブルで一致SETタイプ