我的要求是从日期类型列中获取 GMT/UTC 时间。但是当我使用 cast 将日期转换为时间戳时,它使用美国/太平洋时区作为参考,尽管会话时区设置为 GMT。因此,除非我使用 from_tz,否则我看不到想要的结果。oracle sql中是否还有其他时区设置需要修改以始终将GMT作为参考?
alter session set time_zone='+00:00';
select sessiontimezone from dual;
select current_timestamp from dual;
select sys_extract_utc(cast (sysdate as timestamp)) from dual;
select sys_extract_utc(from_tz(cast (sysdate as timestamp), '-07:00')) from dual;
select sys_extract_utc(current_timestamp) from dual;
Session altered.
SESSIONTIMEZONE
---------------------------------------------------------------------------
+00:00
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
11-APR-16 08.46.42.292173 AM +00:00
SYS_EXTRACT_UTC(CAST(SYSDATEASTIMESTAMP))
---------------------------------------------------------------------------
11-APR-16 01.46.42.000000 AM
SYS_EXTRACT_UTC(FROM_TZ(CAST(SYSDATEASTIMESTAMP),'-07:00'))
---------------------------------------------------------------------------
11-APR-16 08.46.42.000000 AM
SYS_EXTRACT_UTC(CURRENT_TIMESTAMP)
---------------------------------------------------------------------------
11-APR-16 08.46.42.295310 AM
任务表有一个名为 task_started 的日期类型列。我希望从此日期字段中获取 UTC 时间。作为其中的一部分,我试图在插入数据时将会话时区更改为 GMT,以便我可以简单地将其转换回无效的时间戳。
select task_started from tasks where rownum <2;
TASK_STAR
---------
10-APR-16
desc tasks;
Name Null? Type
----------------------------------------- -------- ----------------------------
...
TASK_STARTED DATE
...