时区间的MSSQL UTC时间转换技巧(mssql utc)
最近我们更新服务器和我们的数据库系统,以支持 UTC 时间,但是我们发现在一些复杂的查询中,我们需要转换服务器端的本地时间到毫秒级的 UTC 时间,以便执行一些操作。 在 SQL 服务器中,我们可以通过转换的技巧,轻松的实现 UTC 时间和本地时间的转换。
首先,我们可以使用 DateAdd 函数将本地时间转换为 UTC 时间,例如:
SELECT DATEADD(HOUR, -4, GETDATE())
这将在本地时间上减去4小时,从而将其转换为 UTC 时间。 我们可以通过使用 DateAdd 函数,以确定适用于当前服务器时区的 GMT 时差,然后进行计算:
SELECT DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), CURRENT_TIMESTAMP), GETUTCDATE())
在上面的示例中,我们首先计算出当前服务器时区与 UTC 时区之间的小时差,然后将这个值添加到 getutcdate() 函数返回的 UTC 时间中。
要使用 DateAdd 函数转换毫秒级的 UTC 时间,我们需要使用 DATEADD 的 MILLISECOND 参数:
SELECT DATEADD(MILLISECOND, DateDiff(SECOND, 0, GetUtcDate()) * 1000, 0)
在本例中,我们将 GetUTCdate() 转换回从 1970 年 1 月 1 日开始的秒,然后将其乘以 1000,以换算为毫秒,然后将毫秒添加到 0 时间上。
我们可以使用上述技术,将 UTC 时间转换为其他 AndMS SQL 中的时区,最重要的是,我们已经可以支持复杂的查询,而无需担心服务器端本地时间和 UTC 时间的差异。 因此,我们可以准确而精确的执行诸如区分客户端和服务器时间之类的操作,只需要适当的时间转换技巧就可以实现。