首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将getdate()转换为EST

将getdate()转换为EST
EN

Stack Overflow用户
提问于 2011-01-17 19:26:04
回答 11查看 41.2K关注 0票数 16

我想将SQL Server中的getdate()转换为美国东部时间。

EN

回答 11

Stack Overflow用户

发布于 2019-12-18 06:51:54

更新答案(05-29-2020)

Azure SQL团队已经发布了一个new function,这使得这一点变得更加容易。SELECT CURRENT_TIMEZONE_ID()将返回服务器的时区。将此函数添加到以下原始答案中会产生一个查询,该查询将在所有Azure SQL服务器上全局工作。

代码语言:javascript
复制
SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE (SELECT CURRENT_TIMEZONE_ID()) AT TIME ZONE 'Eastern Standard Time')`

此查询将在任何Azure SQL Server上运行。

原始答案:

这里有很多答案是不必要的复杂的,或者没有考虑到夏令时。不需要大量的CASE语句。不需要新的存储过程或标量/用户定义的函数。从sql Server 2016开始,只需一行本机SQL即可完成时区之间的转换。这是有好处的。例如,可以从报表中调用它,也可以在只读数据库上使用它。

代码语言:javascript
复制
SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time')

就这样。上面,我们使用了更详细的here中描述的AT TIME ZONE特性。这里可能有一些新的功能和特性,所以需要解释一下。上面的查询调用GETDATE()并使用AT TIMEZONE将其时区设置为UTC。这也隐式地将它的数据类型从datetime更改为datetimeoffset。接下来,我们将再次调用AT TIMEZONE将其转换为EST。最后,我们将整个过程包装在CONVERT()中,以将其返回到datetime,并在此过程中删除不需要的+/-小时部分。

一步一步执行查询...

代码语言:javascript
复制
SELECT [GetDate]            = GETDATE()
SELECT [GetDateAtUtc]       = GETDATE() AT TIME ZONE 'UTC'
SELECT [GetDateAtUtcAtEst]  = GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'
SELECT [GetDateEst]         = CONVERT(DATETIME,GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time')

票数 12
EN

Stack Overflow用户

发布于 2011-01-17 19:27:55

您是否考虑过GETUTCDATE()并从那里执行偏移量?如果您指的是标准时间的EST,那么它就是UTC-5,所以

代码语言:javascript
复制
select dateadd(hour,-5,GETUTCDATE())
票数 11
EN

Stack Overflow用户

发布于 2016-04-29 00:23:39

东部时间为GMT-5小时,而美国东部时间为GMT-4小时。

获取EST的步骤:

代码语言:javascript
复制
select dateadd(hour,-5,GETUTCDATE())

要获取EDT:

代码语言:javascript
复制
select dateadd(hour,-4,GETUTCDATE())
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4712616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档