在 SQL 服务器中转换不同的时区

Convert different time zone in SQL Server

我想在 SQL Server 2008 中将东部时间 ("GMT-05:00") 转换为 IST ("GMT+05:30")。

它应该基于偏差和日光偏差

例如:东部时间的偏差值为 300,日光偏差值为 -60,IST 的偏差值为 -330,日光偏差值为 -60。

我知道如何在 C# 中转换它,但我想创建一个作业,为此我需要在 SQL 服务器中进行这种转换。

在 SQL Server 2008 或更高版本中使用 DATETIMEOFFSET 数据类型和 SWITCHOFFSET 方法:

-- define your input in Eastern Time
DECLARE @Input DATETIMEOFFSET = SYSDATETIME()
-- SET @Input = SWITCHOFFSET(@Input, '-05:00')
SET @Input = SWITCHOFFSET(@Input, -300)

DECLARE @output DATETIMEOFFSET

-- convert Eastern Time to IST
-- SET @output = SWITCHOFFSET(@input, '+05:30')
SET @output = SWITCHOFFSET(@input, 330)

SELECT @Input, @output

除了基本偏移量和 dst 偏差之外,还有很多事情需要考虑。具体来说,不同的偏移量在不同的日期和不同的时间在标准时间和夏令时之间切换。

正确的方法是使用命名时区。与许多其他数据库不同,SQL 服务器本身不支持时区。它只支持时区 offsets。请参阅 the timezone tag wiki 中的 "Time Zone != Offset"。

幸运的是,我已经为你完成了所有艰苦的工作。使用我的 SQL Server Time Zone Support 项目,您可以编写此查询:

SELECT Tzdb.ConvertZone(yourDateTimeValue, 'America/New_York', 'Asia/Kolkata', 1, 1)

时区是标准的IANA tz database identifiers,最后的数字选项在项目的自述文件中有解释。