'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タイムスタンプリテラルを使用)