次のような日付/時刻の値を持つフィールドがあります。
2009-11-17 18:40:05
UTCです。クエリでこれをESTに変換するにはどうすればよいですか?
私はこのようなことを試みていますが、エラーが発生します。
// datetime is the field name
SELECT
FROM_TZ(TIMESTAMP TO_DATE(datetime, 'yyyy-mm-dd hh24miss'), 'EST') AS DT
FROM
db_name
次のような日付/時刻の値を持つフィールドがあります。
2009-11-17 18:40:05
UTCです。クエリでこれをESTに変換するにはどうすればよいですか?
私はこのようなことを試みていますが、エラーが発生します。
// datetime is the field name
SELECT
FROM_TZ(TIMESTAMP TO_DATE(datetime, 'yyyy-mm-dd hh24miss'), 'EST') AS DT
FROM
db_name
データベースで機能させるには、少し調整する必要がありましたが、これは機能しました。
select from_tz(to_timestamp('2009-11-17 18:40:05','yyyy-mm-dd hh24:mi:ss'), 'UTC')
at time zone 'America/New_York' from dual
重要なのは「タイムゾーン」構文です。
日付フィールドをUTCからESTに変換したい場合、これは私にとってはうまくいきました:
CAST(FROM_TZ(CAST(DATE_FIELD AS TIMESTAMP), 'UTC')
at time zone 'America/New_York' AS Date) as DESIRED_FIELD_NAME
まず、目的の日付フィールド(DATE_FIELDとして)をタイムスタンプにキャストします。キャストの結果は、FROM_TZ関数の最初のパラメーターであり、パラメーターはTIMESTAMPタイプである必要があります。2番目のパラメーターは「UTC」です。これは、これから変更するものだからです。
次に、その関数呼び出しの結果をDATE型にキャストして戻し、エイリアスを指定します。
select to_char(systimestamp at time zone 'EST','HH') EST_TIME,
TO_CHAR(SYSDATE,'HH') EDT_TIME,
NEW_TIME(SYSDATE,
(
CASE
WHEN to_char(systimestamp at time zone 'EST','HH') = TO_CHAR(SYSDATE,'HH')
THEN 'EST'
ELSE 'EDT'
END
),'GMT')
from dual
ORACLEでこれを試してください。私は12.2.0.1.064ビットを使用しています。
SELECT * FROM v$version; --find version information
SELECT SYSDATE UTC, NEW_TIME(SYSDATE, 'GMT', 'EST') EST FROM DUAL; --will give both zones
これは私のために働いた、あなたのためにも働くはずです。