sql - 将 getdate() 转换为 EST

标签 sql sql-server tsql datetime getdate

我想将 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')

enter image description here

关于sql - 将 getdate() 转换为 EST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4712616/

相关文章:

sql-server - 如何从 Excel 将记录插入 SQL Server

sql - 如何将数据库中的所有 sql server management studio 事件作为可执行的 mssql 日志获取?

sql - 是否可以计算 group by 中一列的总和?

sql - Oracle SQL - 了解 Dual 表如何发挥其魔力

sql - 查找表中总值和不同值之间的差异

java - Hibernate/JPA MSSQL 将括号替换为 `

sql-server - SSDT 不考虑触发器启用/禁用属性

列值的 SQL 动态总和

sql - 行号重置

sql - 如何在 SQL 中计算该月的最后一天?