我想将SQL Server中的getdate()转换为美国东部时间。
发布于 2019-12-18 06:51:54
更新答案(05-29-2020)
Azure SQL团队已经发布了一个new function,这使得这一点变得更加容易。SELECT CURRENT_TIMEZONE_ID()将返回服务器的时区。将此函数添加到以下原始答案中会产生一个查询,该查询将在所有Azure SQL服务器上全局工作。
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即可完成时区之间的转换。这是有好处的。例如,可以从报表中调用它,也可以在只读数据库上使用它。
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,并在此过程中删除不需要的+/-小时部分。
一步一步执行查询...
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')

发布于 2011-01-17 19:27:55
您是否考虑过GETUTCDATE()并从那里执行偏移量?如果您指的是标准时间的EST,那么它就是UTC-5,所以
select dateadd(hour,-5,GETUTCDATE())发布于 2016-04-29 00:23:39
东部时间为GMT-5小时,而美国东部时间为GMT-4小时。
获取EST的步骤:
select dateadd(hour,-5,GETUTCDATE())要获取EDT:
select dateadd(hour,-4,GETUTCDATE())https://stackoverflow.com/questions/4712616
复制相似问题