2009-11-17 202 views
12

我有一個字段這樣的日期/時間值:轉換時間戳/日期時間從UTC到EST的Oracle SQL

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

謝謝我剛剛發現日期格式錯了,嗯:) – 2009-11-17 19:25:08

+0

什麼是「TIMEZONE TO_DATE(...)」語法?我以前從來沒有見過。 – Dan 2009-11-17 19:32:10

+3

使用ANSI語法指定時間戳文字更容易,因此您可以用「timestamp」2009替換「to_timestamp('2009-11-17 18:40:05','yyyy-mm-dd hh24:mi:ss')」 -11-17 18:40:05'「...更小巧一點 – 2009-11-18 10:15:28

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。第二個參數是'UTC',因爲那是我們正在改變的。

然後,我將該函數的結果調用回DATE類型並給它一個別名。