在 oracle 中显示本地时间的默认时间戳

Tom*_*ava 2 oracle timestamp

我创建了一个带有 created_time 列的表,该列的默认时间为 systimestamp。当我向其中插入一行时,时间显示的是我的当地时间。23-02-18 08:49:05.430419000 上午

但是当我查询 select systimstamp from dual 时,它显示 GMT 就像 23-02-18 05:11:04.225141000 AM +00:00

如何确保默认时间戳也考虑 GMT?

CREATE TABLE TS_TEST (
MY_NAME VARCHAR2(100),
created_time TIMESTAMP(6) default CURRENT_TIMESTAMP
);
insert into TS_TEST (MY_NAME) Values ('george');
Run Code Online (Sandbox Code Playgroud)

我希望 created_time 列应该总是在 GMT

Wer*_*eit 5

检查您的代码,然后您应该看到问题。您说“默认时间为 systimestamp ”,但您的代码是default CURRENT_TIMESTAMP

SYSTIMESTAMP 不同于 CURRENT_TIMESTAMP

  • SYSTIMESTAMP返回当前日期/时间,如TIMESTAMP WITH TIME ZONE数据库服务器操作系统的时区(不是DBTIMEZONE!)。

  • CURRENT_TIMESTAMP返回TIMESTAMP WITH TIME ZONE当前用户会话时区中的当前日期/时间日期(可能随时更改)。

  • LOCALTIMESTAMP返回TIMESTAMP当前用户会话时区中的当前日期/时间日期(不带时区信息)。

我会推荐这个:

CREATE TABLE TS_TEST (
   MY_NAME VARCHAR2(100),
   created_time TIMESTAMP(6) default SYS_EXTRACT_UTC(SYSTIMESTAMP)
);
Run Code Online (Sandbox Code Playgroud)

或使用 created_time TIMESTAMP(6) WITH TIME ZONE default SYSTIMESTAMP