2016-07-08 6 views
1

fooの列がchanged_columのdateのテーブルを持っているとします。oracle:サーバーのタイムスタンプの代わりにローカルのタイムスタンプを取得する方法

今私はそのcolumからローカルタイムスタンプを取得したいと思い、私は次のことを試してください。

select TO_CHAR(cast (changed_colum as timestamp) at local, 'YYYY-MM-DD HH24:MI:SS TZR') from foo 

result---> 
2016-07-08 08:48:35 EUROPE/BERLIN 

が、これは、アプリケーション・サーバーの日付を印刷します。セッションではなく、サーバーの現地日が必要です。

で、Oracleの文書によると

+1

'changed_column'はちょうど' date'なので、明らかにタイムゾーン情報は含まれていません。その列で時刻データはどのように解釈されますか?それはUTCですか?その他?言い換えれば、データが「7月8日@ 5 PM」と言うと、それはどのタイムゾーンで「5 PM」ですか? – sstan

答えて

0

:この

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL; 

または

::これは役立つ

SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL; 

ホープ https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions079.htm#i999873

はこれを試してみてください。あなたは日付がすべてを知っている場合は、あなたが

from_tz(cast (changed_column as timestamp), dbtimezone) at time zone sessiontimezone 

を使用し、必要に応じてそれをフォーマットすることができ、「サーバーのタイムゾーンを使用して」...求めているものを

+0

私はcreated_columからローカルタイムスタンプを取得する方法が必要です。 – Ronald

0

はっきりしません。

0

DATEデータタイプにタイムゾーン情報が含まれていません。これらの日付のタイムゾーンは何ですか?アプリケーションの設計からこれを知らなければ、変換することはできません。

AT LOCALは、AT TIME ZONE SESSIONTIMEZONEと同じです。これは、アプリケーションサーバーによってログオン時に設定されたタイムゾーンです(またはALTER SESSION SET TIME ZONE = ...で設定されます)。このタイムゾーンがクライアントのタイムゾーンと同じ場合は、アプリケーションサーバーでこれをコーディングする必要があります。

関連する問題