在 SQL Server 中可以创建这样的表:
create table test (
[TimeStamp_test] [datetime] NOT NULL DEFAULT (getutcdate())
);
我们有什么类似于getutcdate()
in的东西oracle
吗?
我知道使用SELECT SYS_EXTRACT_UTC FROM DUAL
(即在插入此表时使用触发器)。
让我知道是否有其他简单的选项可用,谢谢。
在 SQL Server 中可以创建这样的表:
create table test (
[TimeStamp_test] [datetime] NOT NULL DEFAULT (getutcdate())
);
我们有什么类似于getutcdate()
in的东西oracle
吗?
我知道使用SELECT SYS_EXTRACT_UTC FROM DUAL
(即在插入此表时使用触发器)。
让我知道是否有其他简单的选项可用,谢谢。
试试这个:
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 时间列的时区。
抵抗是没有用的。
这是使列接收 UTC 中默认时间戳的更简单方法:
CREATE TABLE TEST (ID NUMBER, UTC_TIMESTAMP TIMESTAMP WITH TIME ZONE DEFAULT FROM_TZ(SYS_EXTRACT_UTC(SYSTIMESTAMP), 'UTC'));