簡體   English   中英

將時間戳/日期時間從 UTC 轉換為 EST Oracle SQL

[英]Convert timestamp/date time from UTC to 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

我不得不稍微調整它以使其在我的數據庫上工作,但這工作:

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

關鍵是“at time zone”語法。

如果你想將日期字段從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並為其賦予別名。

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.0 64bit

SELECT * FROM v$version; --find version information
SELECT SYSDATE UTC, NEW_TIME(SYSDATE, 'GMT', 'EST') EST FROM DUAL; --will give both zones

這對我有用,也應該對你有用。

獲取日期和時間的另一種方法是,

from_tz(CAST(DATE_FIELD AS TIMESTAMP), 'UTC') at time zone 'America/New_York' as DESIRED_FIELD_NAME

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM