データ型が「TIMESTAMP(6) WITH LOCAL TIME ZONE」の列を持つテーブルがあります
問題: 以下のクエリで、タイム ゾーンが存在しないという例外が発生します。
select * from table where update_time <= CURRENT_TIMESTAMP-3/24;
春の時間変更の 1 時間枠で例外が発生します。どうすればこれを克服できますか?
データ型が「TIMESTAMP(6) WITH LOCAL TIME ZONE」の列を持つテーブルがあります
問題: 以下のクエリで、タイム ゾーンが存在しないという例外が発生します。
select * from table where update_time <= CURRENT_TIMESTAMP-3/24;
春の時間変更の 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;