der*_*rin 11 sql t-sql sql-server datetime getdate
我想getdate()在SQL Server中转换为EST时间.
Tro*_*eft 12
更新答案 (05-29-2020)
Azure SQL 团队发布了一个新功能,使这变得更加容易。 SELECT CURRENT_TIMEZONE_ID()将返回您服务器的时区。将此函数添加到下面的 ORIGINAL ANSWER 中会生成一个查询,它将在所有 Azure SQL Server 上全局运行。
SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE (SELECT CURRENT_TIMEZONE_ID()) AT TIME ZONE 'Eastern Standard Time')`
Run Code Online (Sandbox Code Playgroud)
此查询适用于任何 Azure SQL Server。
原始答案:
这里有很多答案不必要地复杂,或者没有考虑到夏令时。不需要大量的CASE声明。不需要新的存储过程或标量/用户定义的函数。从 SQL Server 2016 开始,时区之间的转换可以通过一行原生 sql来完成。这有好处。例如,它可以从报表中调用或在只读数据库上使用。
SELECT CONVERT(DATETIME,GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time')
Run Code Online (Sandbox Code Playgroud)
就是这样。上面,我们正在使用这些AT TIME ZONE功能,这里有更详细的描述。这里可能有一些新的功能和特性,所以有必要解释一下。上面的查询调用GETDATE()并将其时区设置为 UTC 使用AT TIMEZONE. 隐含地,这也将其数据类型从 a 更改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')
Run Code Online (Sandbox Code Playgroud)
您是否考虑过GETUTCDATE()并从那里执行偏移?如果你的标准时间是EST,那就是UTC-5,那么
select dateadd(hour,-5,GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)
这些都是错误的答案
EST到UTC并不总是5小时的差异.它取决于节省时间它可以是4小时或5小时. http://ww2010.atmos.uiuc.edu/(Gh)/guides/maps/utc/frutc.rxml
| 归档时间: |
|
| 查看次数: |
21062 次 |
| 最近记录: |