如何在 SQL 服务器中使用 TimeZone 将默认约束设置为 UTC 时间

how to set default constraint to UTC time with TimeZone in SQL Server

我必须将默认值添加到带有时区的 UTC 时间的日期时间列,现在我在默认约束中使用 GETUTCDATE(),但它没有将时区信息添加到该列。

请帮帮我。

包含时区信息(特别是偏移量)的类型是 datetimeoffset. GETUTCDATE returns 一个普通的旧 DATETIME,它没有时区指示,甚至没有本地与 UTC 指示符。

如果您关心时区和偏移量,请使用 datetimeoffset 列和 ` SYSDATETIMEOFFSET 作为默认值

您需要 DATETIMEOFFSET 数据类型和 SWITCHOFFSET 函数

DECLARE @t TABLE 
(
 id INT,
 dt DATETIMEOFFSET DEFAULT (SWITCHOFFSET(SYSDATETIMEOFFSET(),'+00:00'))
);

INSERT @t(id) VALUES(1);

SELECT id, dt, SYSDATETIMEOFFSET() 
FROM @t;

自 2016 年起您可以使用 AT TIME ZONE https://docs.microsoft.com/en-ru/sql/t-sql/queries/at-time-zone-transact-sql?view=sql-server-2017