3

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

create table test (
  [TimeStamp_test] [datetime] NOT NULL DEFAULT (getutcdate())
);

我们有什么类似于getutcdate()in的东西oracle吗?

我知道使用SELECT SYS_EXTRACT_UTC FROM DUAL(即在插入此表时使用触发器)。

让我知道是否有其他简单的选项可用,谢谢。

4

2 回答 2

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;

分享和享受。


编辑:为了好玩,我决定尝试让它包含正确的时区。我发现只需在 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'));

可怕,但它确实获得了正确的 UTC 时间列的时区。

抵抗是没有用的。

于 2012-04-20T14:38:47.557 回答
0

这是使列接收 UTC 中默认时间戳的更简单方法:

CREATE TABLE TEST (ID NUMBER, UTC_TIMESTAMP TIMESTAMP WITH TIME ZONE DEFAULT FROM_TZ(SYS_EXTRACT_UTC(SYSTIMESTAMP), 'UTC'));
于 2014-12-04T12:42:36.343 回答