2015-11-06 39 views
0

我想将日期字段'createdate'转换为UTC时间,但问题是-04:00。我尝试了一堆东西,但都没有成功。我正在研究Oracle。有任何想法吗?谢谢。在Oracle中将日期字段转换为UTC

+1

我不确定你在问什么。 '日期'没有时区。如果您想将它从一个时区转换为另一个时区,我们需要知道推断“日期”的时区以及您想要转换为的时区。你似乎说你想转换为UTC,但你也说你想转换为“-04:00”。并且您不告诉我们假定日期的时区是什么。如果您想从-4:00转换为UTC,只需加上4小时。 –

回答

0

这应做到:

cast(createdate as timestamp with time zone) at time zone 'UTC' 

这个createdate转换为时间戳与当前时区(由您的客户端通过SESSIONTIMEZONE定义的)。然后它将其转换为UTC。

+0

当你从'TIMESTAMP'转换到'TIMESTAMP WITH TIME ZONE'时,这是不完全正确的,那么Oracle将采用你当前的本地时区,即'SESSIONTIMEZONE',而不是数据库服务器的时区。 –

+0

@ WernfriedDomscheit谢谢,纠正(我不认为我曾经在一个系统中的客户端和数据库服务器在不同的时区...) –

0

如果您有DATETIMESTAMP值,则这是不可能的,因为这些数据类型没有任何时区信息,因此无法将其转换为任何其他时区 - 除非将该值视为“本地时区”。

有几种解决方案:

  • createdate at time zone 'UTC'
  • SYS_EXTRACT_UTC(createdate)
  • FROM_TZ(createdate, 'UTC')

结果类型是不同的,例如FROM_TZ返回值为TIMESTAMP WITH TIME ZONE值,而SYS_EXTRACT_UTC返回TIMESTAMP值。