在SQL Server中可以创建如下表:
create table test (
[TimeStamp_test] [datetime] NOT NULL DEFAULT (getutcdate())
);
我们在getutcdate()
中有oracle
的任何内容吗?
我知道使用SELECT SYS_EXTRACT_UTC FROM DUAL
(即在插入此表时使用触发器)。
如果还有其他简单的选项,请告诉我,谢谢。
答案 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'));