【问题标题】:UTC timezone for "date" and "time" datatypes in Azure SQLAzure SQL 中“日期”和“时间”数据类型的 UTC 时区
【发布时间】:2017-08-07 09:19:53
【问题描述】:

我计划在我的 SQL Server 2016 Express 数据库中使用 datetime 数据类型,我将在生产环境中将它们部署到 Azure SQL 数据库。

我知道对于“datetime2”数据类型,Azure SQL 将其存储在 UTC 时区中。 “日期”和“时间”也是如此吗? Microsoft 参考资料(上面链接)、日期和时间不是“时区偏移感知和保存”。

这是否意味着它们不像 datetime2 那样存储在 UTC 时间?我还需要担心转换为 UTC 时间吗?

【问题讨论】:

标签: sql-server date time azure-sql-database


【解决方案1】:

为了补充 Alberto 的回答,这更像是一个数据采集问题而不是数据类型问题。

数据类型不对数据进行任何假设。注册为timedate 的变量只是SQL 查询引擎的规范。它告诉引擎如何物理存储数据,并提供一组可以对数据执行的有效操作。因此,time 变量本身不假定任何时区。它可以包含 UTC 时间、PST 时间或您想要的任何时区。 date 变量也是如此。

回到您的问题,是否需要转换为 UTC 时间取决于数据采集方法。如果使用 Azure 上的内置 GETDATE() 方法填充表,则数据将为 UTC,数据类型将为 datatime。要提取date 变量和time 变量,可以使用CONVERT 运算符。

【讨论】:

    【解决方案2】:

    SQL Azure 数据库始终使用 UTC 时间。因此,您不应使用 datetime 数据类型。相反,您应该使用 datetimeoffset。

    您还应该使用 sysdatetimeoffset() 而不是 getdate() 来捕获系统日期。

    当您从数据库表中检索日期时,您应该按照here 的说明使用“AT TIME ZONE”。

    希望这会有所帮助。

    问候,

    阿尔贝托·莫里洛

    【讨论】:

    • 谢谢,但我指的是“时间”数据类型。是否也存储在 UTC 时间?
    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2013-12-17
    • 1970-01-01
    • 2018-03-05
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多