0

データ型が「TIMESTAMP(6) WITH LOCAL TIME ZONE」の列を持つテーブルがあります

問題: 以下のクエリで、タイム ゾーンが存在しないという例外が発生します。

select * from table where update_time <= CURRENT_TIMESTAMP-3/24;

春の時間変更の 1 時間枠で例外が発生します。どうすればこれを克服できますか?

4

1 に答える 1

1

私の環境では再現できませんが、DATEデータ型を無効な型にキャストしたことがエラーの原因だと思いますTIMESTAMP WITH LOCAL TIME ZONE

たとえば、Europe/Parisタイム ゾーンでは、タイムスタンプ2014-03-30 02:30:00が無効です。

SQL> SELECT to_timestamp_tz('2014-03-30 02:30 Europe/Paris',
  2                         'yyyy-mm-dd hh24:mi TZR')
  3    FROM dual;
SELECT to_timestamp_tz('2014-03-30 02:30 Europe/Paris',
                       *
ERROR at line 1:
ORA-01878: specified field not found in datetime or interval

02:00と の間でクロックが転送されるため、この時刻と曜日は存在しません03:00

<=演算子の右側は日付なので(タイムスタンプと数値を追加すると日付が生成されます)、それを a と比較するとTIMESTAMP WITH LOCAL TIME ZONE、列のデータ型にキャストされます。

これは有効なタイムスタンプに変換されるため、間隔演算を使用すると問題が解決すると思います。追加の利点として、結果のコードが読みやすくなります。

試すことができますか:

select * from table where update_time <= CURRENT_TIMESTAMP - INTERVAL '3' HOUR;
于 2014-03-05T13:54:42.973 に答える