将UTC日期作为默认值

dsm*_*dsm 3 oracle

在SQL Server中可以创建这样的表:

create table test (
  [TimeStamp_test] [datetime] NOT NULL DEFAULT (getutcdate())
);
Run Code Online (Sandbox Code Playgroud)

我们有类似的对任何事物getutcdate()oracle

我知道使用SELECT SYS_EXTRACT_UTC FROM DUAL(即使用插入此表的触发器).

如果还有其他简单的选择,请告诉我,谢谢.

Bob*_*ica 5

试试这个:

CREATE TABLE MY_TEST
  (ID NUMBER,
   CURR_TIMESTAMP TIMESTAMP DEFAULT SYSTIMESTAMP,
   UTC_TIMESTAMP  TIMESTAMP DEFAULT SYS_EXTRACT_UTC(SYSTIMESTAMP));

INSERT INTO MY_TEST(ID) VALUES(1);

SELECT * FROM MY_TEST;
Run Code Online (Sandbox Code Playgroud)

分享和享受.


编辑:为了它的乐趣,我决定尝试将其包含在正确的时区中.我发现只是在TIMESTAMP WITH TIME ZONE列中执行SYS_EXTRACT_UTC(SYSTIMESTAMP)会正确地更改值的时间部分,但只留下时区.经过一番捣乱后,我想出了以下内容:

CREATE TABLE RPJ_TEST
  (ID NUMBER,
   CURR_TIMESTAMP TIMESTAMP WITH TIME ZONE DEFAULT SYSTIMESTAMP,
   UTC_TIMESTAMP  TIMESTAMP WITH TIME ZONE
      DEFAULT TO_TIMESTAMP_TZ(TO_CHAR(SYS_EXTRACT_UTC(SYSTIMESTAMP)) || ' 00:00',
                              'DD-MON-YYYY HH:MI:SS.FF6 PM TZH:TZM'));
Run Code Online (Sandbox Code Playgroud)

可见,但它确实获得了UTC时间列的时区.

抵抗是没用的.