转换时间戳/日期时间从UTC到EST的Oracle SQL
问题描述:
我有一个字段这样的日期/时间值:转换时间戳/日期时间从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
答
我不得不调整它稍微得到它在我的数据库工作,但这个工作:
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
的关键是“在时间区”的语法。
答
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
答
如果你想日期字段从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类型并给它一个别名。
谢谢我刚刚发现日期格式错了,嗯:) – 2009-11-17 19:25:08
什么是“TIMEZONE TO_DATE(...)”语法?我以前从来没有见过。 – Dan 2009-11-17 19:32:10
使用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