2009-11-17 37 views
12

は、私はこのような日付/時刻値を持つフィールドを持っている:変換スタンプ/日付時刻

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 

答えて

15

私はそれが私のデータベース上で動作させるために、わずかにそれを微調整しなければならなかったが、これは働いていた:

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 

キーが「時間帯で」構文です。

+0

ありがとう私はちょうど日付が間違った形式であったことを発見した、Duh :) –

+0

"TIMEZONE TO_DATE(...)"の構文は何ですか?私はかつてそれを見たことがない。 – Dan

+3

ANSI構文でタイムスタンプリテラルを指定する方が簡単なので、「to_timestamp( '2009-11-17 18:40:05'、 'yyyy-mm-dd hh24:mi:ss')」を「timestamp '2009」に置き換えることができます-11-17 18:40:05 '"...少しコンパクト –

0
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 
2

あなたは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型にキャストしてエイリアスを返します。

関連する問題