将时间戳/日期时间从UTC转换为EST Oracle SQL

时间:2009-11-17 19:11:17

标签: sql oracle datetime-format

我有一个日期/时间值的字段,如下所示:

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

3 个答案:

答案 0 :(得分:16)

我不得不稍微调整它以使其在我的数据库上工作,但这有效:

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”语法。

答案 1 :(得分:4)

如果您想将日期字段从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并为其赋予别名。

答案 2 :(得分: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