问题 在SQL Server 2008中创建一个datetime列,其默认值为当前时间戳UTC


我在SQL Server 2008中创建一个表,如下所示:

create table Dummy
(
   id int,
   status int,
   node_id varchar(512),
   createdDTTM datetime NOT NULL default CURRENT_TIMESTAMP
);

但是我想将UTC时区指定为默认值。我知道在postgreSQL中我们有类似的东西 createdDTTM TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc')

我们可以在这里做类似的事吗?


10776
2018-04-18 11:30


起源



答案:


对于有时区信息的时间,请使用 DATETIMEOFFSET 在SQL Server中(2008年 和更新):

create table dbo.Dummy
(
   id int,
   status int,
   node_id varchar(512),
   createdDTTM DateTimeOffset NOT NULL default SYSDATETIMEOFFSET()
);

使用 SYSDATETIMEOFFSET() 您将获得默认的当前日期和时间 DATETIMEOFFSET 从SQL Server(在您的服务器所在的本地时区)。

或者也许你正在寻找 SYSUTCDATETIME() 相反,它以UTC格式提供当前日期和时间?这适用于 DATETIME2(n) 要么 DATETIMEOFFSET 列(在SQL Server中 2008年 更新,我推荐  使用 DATETIME 了)


11
2018-04-18 11:36



完善。我使用SYSUTCDATETIME()作为DATETIME2的默认值。在表中插入值时,我只会将它们以UTC格式插入。 - keenUser


答案:


对于有时区信息的时间,请使用 DATETIMEOFFSET 在SQL Server中(2008年 和更新):

create table dbo.Dummy
(
   id int,
   status int,
   node_id varchar(512),
   createdDTTM DateTimeOffset NOT NULL default SYSDATETIMEOFFSET()
);

使用 SYSDATETIMEOFFSET() 您将获得默认的当前日期和时间 DATETIMEOFFSET 从SQL Server(在您的服务器所在的本地时区)。

或者也许你正在寻找 SYSUTCDATETIME() 相反,它以UTC格式提供当前日期和时间?这适用于 DATETIME2(n) 要么 DATETIMEOFFSET 列(在SQL Server中 2008年 更新,我推荐  使用 DATETIME 了)


11
2018-04-18 11:36



完善。我使用SYSUTCDATETIME()作为DATETIME2的默认值。在表中插入值时,我只会将它们以UTC格式插入。 - keenUser