gpt4 book ai didi

sql - 甲骨文世界标准时间

转载 作者:行者123 更新时间:2023-12-05 00:20:10 25 4
gpt4 key购买 nike

我正在尝试读取 Oracle TIMESTAMP WITH TIMEZONE来自 UTC-5 (NY) 中的数据库作为 UTC。

Oracle 快把我逼疯了:

SELECT 
from_tz(MAX(TIMESTAMPWITHTIMEZONE),'UTC'),
SYS_EXTRACT_UTC(MAX(TIMESTAMPWITHTIMEZONE)),
SYS_EXTRACT_UTC(systimestamp),
SYSTIMESTAMP AT TIME ZONE 'UTC'
FROM TABLE

结果:

  • SYS_EXTRACT_UTC(systimestamp)给我:2013-02-20 14:59:04 ,这可能是对的。

  • SYSTIMESTAMP AT TIME ZONE 'UTC'给我:2013-02-20 15:59:04这是我自己的本地柏林 - 随便

现在我想将 TIMESTAMPWITHTIMEZONE (TIMESTAMP(6)) 设置为 UTC

  • SYS_EXTRACT_UTC(MAX(TIMESTAMPWITHTIMEZONE))2013-02-20 08:55:01

  • from_tz(MAX(TIMESTAMPWITHTIMEZONE),'UTC')2013-02-20 10:55:01

严肃点。甲骨文。我想要 UTC。

哪一个是正确的?还是有更好的办法?

最佳答案

功能不同:

  • SYS_EXTRACT_UTCTIMESTAMP WITH TIMEZONE 转换为 TIMESTAMP(推断但不存在时区=UTC)。
  • FROM_TZTIMESTAMP 转换为 TIMESTAMP WITH TIMEZONE

这些函数在应用于单个值时通常会返回不同的结果:

SQL> SELECT sys_extract_utc(localtimestamp) ext,
2 from_tz(localtimestamp, 'UTC') from_tz
3 FROM dual;

EXT FROM_TZ
--------------------- ------------------------
2013/02/20 15:34:24 2013/02/20 16:34:24 UTC

在第一种情况下,TIMESTAMP隐式 给定服务器的时区,然后转换为 UTC 时区的等效时间戳。请注意,通常您应该远离隐式转换。

在第二种情况下,时区之间没有计算:FROM_TZ 函数将地理位置添加到时间点变量中。

顺便说一句,您的示例中缺少一些内容:您不能将 FROM_TZ 函数应用于 TIMESTAMP WITH TIMEZONE 类型的变量(在 9ir2 和 11ir2 上测试):

SQL> select from_tz(systimestamp, 'UTC') from dual;

select from_tz(systimestamp, 'UTC') from dual

ORA-00932: inconsistent datatypes:
expected TIMESTAMP got TIMESTAMP WITH TIME ZONE

编辑以下评论:

在您的情况下,假设您的列是时间 TIMESTAMP,并且知道它们指的是 NY 时区,您可以使用 AT TIME ZONE要转换为 UTC 的表达式:

SQL> SELECT localtimestamp,
2 from_tz(localtimestamp, 'America/New_York') AT TIME ZONE 'UTC' utc
3 FROM dual;

LOCALTIMESTAMP UTC
--------------------- ------------------------
2013/02/20 17:09:09 2013/02/20 22:09:09 UTC

关于sql - 甲骨文世界标准时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14983266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com