我计划在我的SQL Server 2016 Express数据库中使用date和time数据类型,我将在生产环境中将其部署到Azure SQL数据库。
我知道" datetime2"数据类型,Azure SQL将其存储在UTC时区中。这也是" date"和"时间"? Microsoft引用(上面链接),日期和时间不是"时区偏移感知和保留"。
这是否意味着它们不像datetime2那样存储在UTC时间内?我还要担心转换到UTC时间吗?
答案 0 :(得分:1)
为了补充Alberto的答案,它更像是数据采集问题,而不是数据类型问题。
数据类型不对数据进行任何假设。注册为time
或date
的变量只是SQL查询引擎的规范。它告诉引擎如何物理存储数据,它提供了一组可以对数据执行的有效操作。因此,time
变量本身不会占用任何时区。它可以包含UTC时间,PST时间或您想要的任何时区。 date
变量也是如此。
回到你的问题,转换到UTC时间的需要将取决于数据采集方法。如果使用Azure上的内置GETDATE()
方法填充表,则数据将为UTC,数据类型为datatime
。要提取date
变量和time
变量,您可以使用CONVERT
运算符。
答案 1 :(得分:0)
SQL Azure数据库始终使用UTC时间。因此,您不应使用datetime数据类型。相反,你应该使用datetimeoffset。
您还应该使用sysdatetimeoffset()而不是使用getdate()来捕获系统日期。
当您从数据库表中检索日期时,您应该按照here所述使用“AT TIME ZONE”。
希望这有帮助。
此致
Alberto Morillo