Azure 上SQL Database(PaaS)Time Zone时区题材处理

SQL Server 1

注意:因为AT
Time Zone语法是Azure SQL Database
V12的功用,所以假诺您的数据库不是V12版本的话是不帮忙那么些语法的,你执行语句是会抛出上边的错误

Syntax

CREATE TABLE [dbo].[appcount](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [createtime] [datetime] NULL,
    PRIMARY KEY CLUSTERED (Id)
)

http://wely-lau.net/2011/07/10/managing-timezone-in-sql-azure-2/

假若要博得到方今时区的日子来说,大家得以将GetDate()这么些法子有些改一下

SQL Server 2

SQL Server,老版本的的Azure SQL
Datbase消除办法可以参见上边这一个博客,通过自定义函数来解决

倘诺大家在突显那几个记录成立时间的时候不带上Time
Zone相关的处理,时间就跟当前光阴对不上号了。

用来标记着那条记下的创始时间是现阶段日子的,可是从来在Azure SQL
Database上边执行出来会变成这么些结果:

一般说来我们往这么些表里面插进去一条数据时会用下边那个讲话:

inputdate AT TIME ZONE timezone

 

SQL Server 3

inputdate
Is an expression that can be resolved to a smalldatetime,
datetime, datetime2, or datetimeoffset value.

INSERT INTO appcount(createtime) VALUES(CONVERT(DATETIME,SYSDATETIMEOFFSET() AT TIME ZONE 'China Standard Time'))

timezone
Name of the destination time zone. SQL Server relies on time zones that
are stored in the Windows Registry. All time zones installed on the
computer are stored in the following registry hive:
KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Time Zones
. A list of installed time zones is also
exposed through the sys.time_zone_info
(Transact-SQL)

view.

 

如若大家有一张表appcount有多个字段一个是自拉长字段id,和此外一个字段是日期型字段Createdate

从图里大家会发现时间变回了咱们想要的地头时间了

在Azure上面的PaaS时间都是以UTC时间为准(云的世界里大多都是以UTC时间为标准的),所以之前在地点SQL
Server下边常用的GetDate()方法会境遇问题,在中国收获的时日会被眼下时间少了8个小时,因为Azure上的光阴都是UTC之间,中国的时区是+8.所以你通过GetDate()获取的年华少了8个钟头是例行的。不过遭遇这些题目有怎么着好格局可以缓解吧?如何才能获取带上时区偏移之后的岁月吧?。在Azure
SQL
Database上边是从未艺术直接通过设置某个参数可能变量就可以缓解的。可是SQL
Database V12事后开首协助SQL Server 2016才支撑的一个新的语法:AT Time
Zone

INSERT INTO appcount(createtime) VALUES(getdate())

Arguments

有了那几个新的语法之后大家缓解这些时区的标题就便于一些了。

相关文章