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

Phi*_*ord 14 sql oracle datetime-format

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

2009-11-17 18:40:05
Run Code Online (Sandbox Code Playgroud)

它是UTC.在查询中如何将其转换为EST?

我正在尝试这样的东西,但它会引发错误.

// datetime is the field name
SELECT 
   FROM_TZ(TIMESTAMP TO_DATE(datetime, 'yyyy-mm-dd hh24miss'), 'EST') AS DT
FROM
   db_name
Run Code Online (Sandbox Code Playgroud)

Dan*_*Dan 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
Run Code Online (Sandbox Code Playgroud)

关键是"at time zone"语法.

  • 使用ANSI语法更容易指定时间戳文字,因此您可以将"to_timestamp('2009-11-17 18:40:05','yyyy-mm-dd hh24:mi:ss')"替换为"timestamp'2009- 11-17 18:40:05'"......更紧凑一点 (3认同)

Tre*_*ews 5

如果要将日期字段从 UTC 转换为 EST,这对我有用:

CAST(FROM_TZ(CAST(DATE_FIELD AS TIMESTAMP), 'UTC') 
at time zone 'America/New_York' AS Date) as DESIRED_FIELD_NAME
Run Code Online (Sandbox Code Playgroud)

首先,我将所需的日期字段(如 DATE_FIELD)转换为时间戳。强制转换的结果是 FROM_TZ 函数的第一个参数,它要求参数的类型为 TIMESTAMP。第二个参数是“UTC”,因为这是我们要改变的。

然后,我将该函数调用的结果强制转换回 DATE 类型并给它一个别名。