AntDCが示唆したように、the SYS_EXTRACT_UTC()
functionを使用できます。これは、 'タイムゾーン付き日時'をどのタイムゾーンからでもUTCに変換します。
SYSDATEにはタイムゾーンがありません。これを渡した場合、暗黙的にシステムのタイムゾーンに変換されるため、動作しますが、代わりにSYSTIMESTAMPを使用することができます。これは、すでにゾーンを認識しているためです。
コメントには、日付が必要ですが、すべてのOracle日付には時間コンポーネントがあります。あなたはTRUNC()
と(あなたがやっているの比較のために理にかなっている)深夜に設定した時間と日付としてタイプを結果を得ることができます。
select systimestamp,
sys_extract_utc(systimestamp) as utctime,
trunc(sys_extract_utc(systimestamp)) as utcdate
from dual;
SYSTIMESTAMP UTCTIME UTCDATE
-------------------------------- ------------------------- -------------------
2016-04-08 17:18:27.352 +01:00 2016-04-08 16:18:27.352 2016-04-08 00:00:00
は、英国内のサーバー上で実行しているので、現地時間はBSTです。その日の変更を伴わないので、効果はなく、サーバーの時間のセッション時間を用いて実証することができます
:
alter session set time_zone = '+12:00';
select current_timestamp,
sys_extract_utc(current_timestamp) as utctime,
trunc(sys_extract_utc(current_timestamp)) as utcdate
from dual;
CURRENT_TIMESTAMP UTCTIME UTCDATE
-------------------------------- ------------------------- -------------------
2016-04-09 04:23:17.910 +12:00 2016-04-08 16:23:17.910 2016-04-08 00:00:00
私のセッション時間は2016年4月9日であるが、それはまだ見つかっUTC日付は2016-04-08となります。
(明確な、私ははあなたがcurrent_timestamp
やcurrent_date
の使用に切り替えるを示唆しておりませんことを特徴とする。私は純粋にデモとして代わりにsystimestamp
とsysdate
のそれらを使用しています)。
あなたの編集は私の質問を予期し、それに答えました。ありがとうございました!それは非常に明確です。私はこれが私が探しているものを達成すると信じています。 – CheeseFry