将UTC日期作为默认值

时间:2012-04-20 13:43:47

标签: oracle

在SQL Server中可以创建如下表:

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

我们在getutcdate()中有oracle的任何内容吗?

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

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

2 个答案:

答案 0 :(得分: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时间列的时区。

抵抗是没用的。

答案 1 :(得分:0)

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

CREATE TABLE TEST (ID NUMBER, UTC_TIMESTAMP TIMESTAMP WITH TIME ZONE DEFAULT FROM_TZ(SYS_EXTRACT_UTC(SYSTIMESTAMP), 'UTC'));