我想将 SQL Server 中的 getdate()
转换为 EST 时间。
最佳答案
更新答案(2020 年 5 月 29 日)
Azure SQL 团队发布了 new function这使得这变得更加容易。 SELECT CURRENT_TIMEZONE_ID()
将返回您服务器的时区。将此函数添加到下面的原始答案中将产生一个将在所有 Azure SQL Server 上全局运行的查询。
SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE (SELECT CURRENT_TIMEZONE_ID()) AT TIME ZONE 'Eastern Standard Time')
此查询适用于任何 Azure SQL Server。
原答案:
这里有很多答案过于复杂,或者没有考虑夏令时。不需要大量的 CASE
语句。不需要新的存储过程或标量/用户定义的函数。从 SQL Server 2016 开始,时区之间的转换可以通过单行 native SQL 来完成。这有其优点。例如,可以从报表中调用它或在只读数据库上使用它。
SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time')
就是这样。上面,我们使用了 AT TIME ZONE
功能,更详细地描述了 here 。这里可能有一些新的功能和特性,因此有必要进行解释。上面的查询调用 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')
关于sql - 将 getdate() 转换为 EST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4712616/