Azure 上SQL Database(PaaS)Time Zone时区问题处理
在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
inputdate AT TIME ZONE timezone
- inputdate
-
Is an expression that can be resolved to a smalldatetime, datetime, datetime2, or datetimeoffset value.
- 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
-
CREATE TABLE [dbo].[appcount](
[Id] [int] IDENTITY(1,1) NOT NULL,[createtime] [datetime] NULL,
PRIMARY KEY CLUSTERED (Id)
)
通常我们往这个表里面插进去一条数据时会用下面这个语句:
INSERT INTO appcount(createtime) VALUES(getdate())
用来标记着这条记录的创建时间是当前时间的,但是直接在Azure SQL Database上面执行出来会变成这个结果:
-

-
如果我们在显示这个记录创建时间的时候不带上Time Zone相关的处理,时间就跟当前时间对不上号了。
-
如果要获取到当前时区的时间的话,我们可以将GetDate()这个方法稍微改一下
-
INSERT INTO appcount(createtime) VALUES(CONVERT(DATETIME,SYSDATETIMEOFFSET() AT TIME ZONE 'China Standard Time'))
-

从图里我们会发现时间变回了我们想要的本地时间了
注意:因为AT Time Zone语法是Azure SQL Database V12的功能,所以如果你的数据库不是V12版本的话是不支持这个语法的,你执行语句是会抛出下面的错误

老版本的的Azure SQL Datbase解决办法可以参考下面这个博客,通过自定义函数来解决
http://wely-lau.net/2011/07/10/managing-timezone-in-sql-azure-2/
Azure 上SQL Database(PaaS)Time Zone时区问题处理的更多相关文章
- Azure 上SQL Database(PaaS)Time Zone时区问题处理(进阶篇)
通常ISV在面对本地客户时对时间相关的处理,一般都时区信息都是不敏感的.但是现在云的世界里为了让大家把时间处理的方式统一起来,云上的服务都是以UTC时间为准的,现在如果作为一个ISV来说就算你面对的客 ...
- [Windows Azure] Managing SQL Database using SQL Server Management Studio
Managing Windows Azure SQL Database using SQL Server Management Studio You can use Windows Azure SQL ...
- [Windows Azure] Windows Azure Storage & SQL Database
http://channel9.msdn.com/Series/Windows-Azure-Storage-SQL-Database-Tutorials Windows Azure offers mu ...
- [Windows Azure] Monitoring SQL Database Using Dynamic Management Views
Monitoring Windows Azure SQL Database Using Dynamic Management Views 5 out of 7 rated this helpful - ...
- Java连接Azure SQL Database
Azure SQL Database是Azure上的数据库PAAS服务,让用户可以快速的创建和使用SQL数据库而不用担心底层的备份,安全,运维,恢复等繁琐的工作,本文简单介绍如何使用Java程序连接到 ...
- [Windows Azure] Guidelines for Connecting to Windows Azure SQL Database
Guidelines for Connecting to Windows Azure SQL Database 6 out of 12 rated this helpful - Rate this t ...
- [Windows Azure] Learn SQL Reporting on Windows Azure (9-Step Tutorial)
Learn SQL Reporting on Windows Azure (9-Step Tutorial) 4 out of 4 rated this helpful - Rate this top ...
- Azure SQL Database (21) 将整张表都迁移到Azure Stretch Database里
<Windows Azure Platform 系列文章目录> Azure SQL Database (19) Stretch Database 概览 Azure SQL Da ...
- Azure SQL Database (19) Stretch Database 概览
<Windows Azure Platform 系列文章目录> Azure SQL Database (19) Stretch Database 概览 Azure SQL Da ...
随机推荐
- python sys.argv是什么?
1.sys.argv 是获取运行python文件的时候命令行参数,且以list形式存储参数 2.sys.argv[0] 代表当前module的名字 下面的代码文件是a.py,当我不用IDE工具,只用命 ...
- Pyhone学习之环境搭建
一.python 环境搭建 本章节我们将向大家介绍如何在本地搭建Python开发环境.Python可应用于多平台包括 Linux 和 Mac OS X.你可以通过终端窗口输入 "python ...
- 团队目标WBS及具体任务分工
• 首先我们讨论了实验第一个冲刺周期要实现的功能,我们的初期目标. • 然后我们进一步梳理了第一阶段的任务和需求. • 之后对任务进行了划分和领取. • 最后每个人对自己的任务进行了估算,并约定 ...
- 《C》数组
数组 数组方法: var arr = [1, 2, 3]; arr.push(4)://arr='[1, 2, 3, 4]' 向末尾添加一个或者多个元素 arr.pop()://删除末位元素 var ...
- HDU 5501 The Highest Mark
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5501 The Highest Mark Accepts: 32 Submissions: 193 ...
- DB2的编目
D在DB2数据库中,编目(catalog)这个单词很难理解,我自己当初在学习DB2的时候也常常被这个编目搞的很不明白,直到现在我个人也感觉到DB2中编目(catalog)这个术语用的不是很好,具体来说 ...
- 浅析GCC下C++多重继承 & 虚拟继承的对象内存布局
继承是C++作为OOD程序设计语言的三大特征(封装,继承,多态)之一,单一非多态继承是比较好理解的,本文主要讲解GCC环境下的多重继承和虚拟继承的对象内存布局. 一.多重继承 先看几个类的定义: 01 ...
- HDU 2105 The Center of Gravity
http://acm.hdu.edu.cn/showproblem.php?pid=2105 Problem Description Everyone know the story that how ...
- Oracle判断字段中是否包含中文(若有,取出该中文的方法)
一.问题说明 在处理数据的时候,需要判断某个字段字符串中是否有中文,若有则取出中文. 二.解决办法 首先如何判断某个字段字符串中是否有中文.这里介绍三种方法: 1.采用ASCIISTR函数 说明:AS ...
- Mac下Java JNI 调C
简介 JNI的实现步骤如下: 编写带有native声明的方法的Java类 使用javac命令编译编写的Java类 使用java -jni className 来生成后缀名为.h的头文件 使用其他语言( ...