2016-11-21 3 views
0

開発者が、誤ったタイムゾーン形式のデータをデータベースに書き込みました。代わりに、時間のここに見られるように、それは名前を持つオフセット:タイムゾーンを決定するためにWHEREを使用してTIMESTAMP値を更新します。

18-NOV-16 12.17.41.000000000 PM -05:00 
18-NOV-16 12.17.05.000000000 PM -05:00 
18-NOV-16 12.16.07.000000000 PM AMERICA/NEW_YORK 
18-NOV-16 12.12.54.000000000 PM -05:00 
18-NOV-16 12.12.33.000000000 PM -05:00 

問題の列がタイプTIMESTAMP(0) WITH TIMEZONEです。もう1つのサードパーティのアプリケーションは、長い形式のタイムゾーンを処理するようにはコーディングされていないため、これらのレコードの読み取りがクラッシュしています。ここで研究する

は、私はこれを修正するための正しい更新クエリを発見した:

UPDATE <<your table>>  
SET <<your timestamp column>> = <<your timestamp column>> AT TIME ZONE 'UTC' 

問題は、私は500K +レコードを持っており、わずか数百行が含まれる場合、テーブル全体を更新したくないです(更新後に行われる複製のため)。不適切なタイムゾーンデータが格納されている行だけを取得するには、どのようにしてWHERE節を使用しますか?私はすべてを読んだことがあり、タイムゾーンの形式でフィルタリングの結果を示す例は見つかりません。

ありがとうございました!

+0

これを保存するカラムはどのようなタイプですか?それはvarchar2ですか? – Kacper

+0

なぜアメリカ/ニューヨークを間違っているとお考えですか? –

+0

TIMESTAMP(0)WITH TIMEZONEです。これを追加する質問を編集します。 – Mobilemike

答えて

3

私がテストするために私と一緒にデータを持っていますが、これを試してみません:「それはあなたを返す

where extract(timezone_region from date_column) <> 'UNKNOWN' 

私はあなたがこの機能を使用する場合と思い、それが唯一の数値(いない領域)を持っていますUNKNOWN '

+0

EXCELLENT @Renatoこれは完全に機能します!ありがとう! – Mobilemike

関連する問題