2009-07-21 2 views
34

おそらく古典的です... Oracle上のSYSDATEのUTC値を取得する簡単な方法を知っていますか(最善の方法は第8版でもうまくいくでしょう)。今のSYSDATEのOracle上でのUTC値の取得方法

私はカスタム機能:(

乾杯をしました、

ステファン

答えて

30

あなたはまた、あなたのタイムゾーンに変更する必要があるかもしれません

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -02:00') FROM DUAL; 

を使用することができます

ALTER SESSION SET TIME_ZONE = 'Europe/Berlin'; 

それとも

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM dual; 
+1

まあ、トリックは、SYSDATEから変換することです。 まず、SESSIONTIMEZONEが何であるかを何とか確立し、その知識を使ってSYS_EXTRACT_UTCのオフセット値を取得する必要がありますか? – stic

+0

はい、このリンクをoracle(日時とタイムゾーンのパラメータ)で確認できます。http://www.oracle.com/technology/obe/obe9ir2/obe-nls/datetime/datetime.htm – Jonathan

+1

微妙なバグ。 –

32
select sys_extract_utc(systimestamp) from dual; 

それを読むとはいえ、Oracle 8の上では動作しません。

19

通常、私はDATE列を使用しますが、より大きいがより正確なTIMESTAMPは使用しません。

次の例は、現在のUTCの日付をDATEとして返します。

CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE) 

タイムゾーンの複雑さを気にする必要がないので、UTCの日付を使用するのは大変です。ユーザーへの最終的な表示だけがオフセットまたは他のトラブルを必要とする。

+0

2つの日付を比較してみましたが、予想される結果が得られませんでしたので、まだ時間コンポーネントが返されていると思います。 Select * From Itemここで、TRUNC(Create_Date)=( )TRUNC(sys_extract_utc(SYSTIMESTAMP))をDUALから選択します。 – DaveK

+2

DATE列には、精度が1秒の時刻コンポーネントが含まれています。 TIMESTAMPが1秒以上の精度を格納するという点で、TIMESTAMP列とは異なります。実際に、上記にTRUNCを追加するのは、時間コンポーネントを切り捨てたい場合です。 –

1

あなたはSYSDATEとタイムスタンプの代わりに、日付だけが必要な場合は、SYSTIMESTAMPを使用してタイムゾーンを指定することができます。

select systimestamp at time zone 'UTC' from dual 

出力:29-AUG-17 06.51.14.781998000 PM UTC

関連する問題