我有一个日期/时间值如下的字段:
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
我有一个日期/时间值如下的字段:
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
关键是“在时区”语法。
如果您想将日期字段从 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
这对我有用,也应该对你有用。