2009-11-17 205 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类型并给它一个别名。